二十八、Wordpress的add_action动作及add_filter过滤器的使用方法
方法所在文件:
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过滤器钩子。
Wordpress的所有钩子:https://adambrown.info/p/wp_hooks