二十八、Wordpress的add_action动作及add_filter过滤器的使用方法

admin2023-01-171519

blob.png

方法所在文件:

wp_footer()    //wp-includes/general-template.php

the_content()    //wp-includes/post-template.php

动作钩子列表:50个动作钩子

add_action    //装载一个函数到指定的钩子上

do_action    //运行动作钩子

<?php

//定义了一个 shuohua 的函数
function shuohua()
{
    echo '说话<br />';
}

function zoulu()
{
    echo "走路<br />";
}

//挂载 shuohua 这个函数到 huangcong 这个动作上
add_action( 'huangcong', 'shuohua' , 2 );
add_action( 'huangcong', 'zoulu' , 1 );

//运行 huangcong 这个动作,把所有挂载在这个动作上面的函数都执行一次
do_action( 'huangcong' );

?>

eq:回到顶部的一个小插件

插件文件hc.php

<?php
/*
插件和作者信息
*/

function auto_top()
{
    echo '<a href="#"><div id="tip" style="width:40px;height:40px;line-height:40px;border:1px solid #F00;bottom:10px;right:10px;position: fixed;text-align:center;">TOP</div></a>';
}

add_action( 'wp_footer', 'auto_top' );

原因:footer.php模板底部的wp_footer()函数(在wp-includes/general-template.php文件内)里面执行了do_action('wp_footer');


过滤器钩子列表:50个过滤器钩子

过滤器与动作原理一样,区别在于过滤器有返回值,执行钩子时可以传递一个参数进去。

add_filter()    //挂载函数到过滤器钩子上

apply_filers()    //创建一个新的过滤器钩子

<?php
function zhuijia( $text )
{
    return $text . "...";
}

function zhuijia1( $text )
{
    return $text . "!!!";
}

//挂载 zhuijia 这个函数到 shuchu 这个过滤器上
add_filter( 'shuchu', 'zhuijia' , 2 );
add_filter( 'shuchu', 'zhuijia1' , 1 );

//创建一个 shuchu 过滤器,传递要过滤的字符串 “黄聪”
echo apply_filters( 'shuchu', '黄聪' );
?>

eq:文章内容前添加字符串

插件文件hc.php

<?php
/*
插件和作者信息
*/
function add_hc( $content )
{
    return "黄聪说:" . $content;
}

//挂在 add_hc 函数到 the_content 这个过滤器上
add_filter( 'the_content', 'add_hc' );

?>

效果:任何调用了the_content()函数的模板页面,都会在内容前加上文字’黄聪说‘:
原因:该模板页面使用了the_content()函数,而该函数(在wp-includes/post-template.php文件内)创建了一个the_content过滤器钩子。

blob.png

Wordpress的所有钩子:https://adambrown.info/p/wp_hooks


网友评论