apply_filters 和 add_filter的关系是什么,怎么使用?

使用wordpress一段时间了,一直没弄明白 add_filter 和 apply_filters 的关系是什么 , 有什么用。今天遇到了一个问题,查看了一些源代码,似乎理解了。记录下来作为笔记。

直观的理解  add_filter 和 apply_filters

  1. apply_filters 执行过滤操作,并且返回过滤后的值
  2. 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);

 

wordpress钩子

留言

您的电子邮箱地址不会被公开。