过滤器(Filters)对于WordPress来说是非常重要的,它极大地扩展了WordPress的定制能力,提高了WordPress的灵活性。无论是制作主题还是开发插件,我们基本上都会或多或少地使用到过滤器,以实现我们的一些特殊需求。
其实,WordPress过滤器的使用非常简单,我们经常用到的也就两个函数而已,它们就是apply_filters和add_filter。本文将对WordPress过滤器进行详细解读与分析。
什么是过滤器?
过滤器就是注册到过滤器钩子(Filter Hook)的函数,过滤器钩子都有一个名字,在WordPress中,一般使用变量$tag来标识这个名字。所有挂接到过滤器钩子上的函数都是过滤器。
过滤器钩子和动作钩子一样,基本的函数有两个,动作钩子有do_action函数,它就有apply_filters函数,该函数是用于执行相应的过滤器函数,不同的是动作钩子仅仅是执行函数(或者称为动作,更为贴切),而过滤器钩子它要做的是通过执行过滤器函数来改变对象或变量的值,就相当于对变量或者对象进行过滤,然后再返回。
过滤器钩子相关函数:
简单地说,动作钩子要的是过程(仅仅执行代码块)而不是结果(输出值/返回值),过滤器钩子要的是结果而不是过程。
apply_filters()函数的用法:
apply_filters( string $tag, mixed $value )
参数:
$tag:(字符串)(必需)过滤器钩子的名字。
$value:(混合)(必需)要过滤的值,如果没人过滤则直接返回这个值。
$var:(混合) (必需)传给过滤函数额外的变量参数,辅助过滤函数对返回值进行操作,可以添加无限个。
返回值:
(混合)过滤后的值,如果没人过滤则直接返回 $value 的值。
add_filter() 函数的用法:
add_filter( $tag, $function_to_add, $priority, $accepted_args );
参数
$tag:(字符串)(必需)所挂载的过滤器名字(和目标 apply_filters() 函数的 $tag 属性一样)。
$function_to_add:(回调)(必需)要挂载的回调函数,参考 PHP 回调函数类型文档。
$priority:(整数)(可选)执行顺序,越小函数越先被执行。默认值:10
$accepted_args:(整数)(可选)回调函数接收的参数数量,设置多个可以接收更多 apply_filters() 函数传进来的参数。默认值:1
返回值
(布尔)总是 True
要注意的是,我们在前面说过,过滤器(过滤器函数)的任务是要改变对象或变量的值,所以通过add_filter函数添加的过滤器必须要有个返回值,也就是函数$function_to_add必需有返回值。
举例:
1、没有创建过滤器(预埋过滤器钩子)
echo '这是一个值,不能被修改' ;
2、添加过滤器钩子,返回的可以修改,但是如果没有天剑过滤器,值不变
echo apply_filters( 'test', '这是一个值,能被修改' );
3、通过添加过滤器,修改值,显示“修改过的值”
function test_function(){
return '修改过的值';
}
add_filter( 'test', 'test_function' );
接受参数的用法:
1、预埋过滤器钩子:
function test_func( $text, $var, $var2 ){
return '修改值' . $var1 . $var2;
}
add_action( 'test', 'test_func', 10, 3 );
echo apply_filters( 'test', '可以被修改的值', '辅助值1', '辅助值2' );
例子
function test_func( $text, $var1, $var2 ){
return $text . $var1 . $var2;
}
add_filter( 'test', 'test_func', 10, 3 );
echo apply_filters( 'test', '参数2', '参数3', '参数4' );
打印:
test参数2参数3