使用wordpress一段时间了,一直没弄明白 add_filter 和 apply_filters 的关系是什么 , 有什么用。今天遇到了一个问题,查看了一些源代码,似乎理解了。记录下来作为笔记。
直观的理解 add_filter 和 apply_filters
- apply_filters 执行过滤操作,并且返回过滤后的值
- add_filter 增加一个过滤动作
函数的原型
add_filter( string tag, callablefunction_to_add, int priority = 10,intaccepted_args = 1 )
apply_filters( string tag, mixedvalue ,[ ...] )
apply_filters 后面可以写更多的参数。
一个简单的示例
function addx(s) { returns . '-x'; }
function addy(s,more) { return s . '-y :' .more; }
function addz(s) { returns . '-z'; }
add_filter('my_string', 'addx');
add_filter('my_string', 'addy', 10, 2);
ans = apply_filters('my_string', 'string', 'more');
add_filter('my_string', 'addz');
var_dump(ans); // string(16) "string-x-y :more"
# 查看钩子
var_dump($wp_filter['my_string']->callbacks);
add_filter 是增加一个钩子,并不执行。直到执行到apply_filters 的是时候,开始执行。增加的钩子可以是一个或者多个。所有 add_filter 负责增加钩子,apply_filters 负责运行这些钩子上的函数,并提供相关的参数。apply_filters 可以提供多个参数,至于需要几个在 add_filter 中四个参数进行说明。
查看钩子
var_dump($wp_filter['my_string']->callbacks);