有一个名为“all”的预定义过滤器,您可以使用add_filter(\'all\', \'word_swap\');
功能word_swap
作为回调传递,将接受过滤器标记(过滤器名称)作为第一个参数,第二个参数将是值。对于某些筛选器(如“shutdown”),可以跳过value参数,因此它必须保留默认值。
function word_swap($tag, $value = null){
// change value the way you want here
return $changed_value;
}
用法示例1:限制您的功能
word_swap
在为某些筛选器标记执行时,可以保留一组标记以进行排除。
function get_tags_to_exclude(){
return [\'some_filter_to_exclude_1\', \'some_filter_to_exclude_2\'];
}
function word_swap($tag, $value = null){
if( in_array( $tag, get_tags_to_exclude() ) ){
return $value;
}
// do whatever you want here
return changed_value;
}
用法示例2:允许您的函数
word_swap
要仅对某些筛选器标记执行,可以保留允许的标记数组。
function get_tags_to_allow(){
return [\'some_filter_to_allow_1\', \'some_filter_to_allow_2\'];
}
function word_swap($tag, $value = null){
if( !in_array( $tag, get_tags_to_allow() ) ){
return $value;
}
// do whatever you want here
return changed_value;
}
如果您希望仅在少数情况下调用筛选器,那么最好使用
add_filter
一个接一个像
add_filter(\'tag1\', \'word_swap\');
add_filter(\'tag2\', \'word_swap\');
因此,如果允许的过滤器数组不包含几乎所有的过滤器,那么示例2是一个糟糕的用法示例。
但是,如果您真的希望对几乎所有的情况都调用过滤器(可能不包括其中的一些),或者如果您想在开发阶段做一些事情,比如跟踪过滤器的执行,那么就可以了。
“all”过滤器总是在过滤器本身之前执行,因此如果有这样的代码
add_filter(\'all\', \'word_swap\');
add_filter(\'some_filter\', \'other_function\');
您的功能
word_swap
将始终在
other_function
. 您甚至可以在函数中使用add\\u filter
word_swap
像这样。
function get_tags_to_exclude(){
return [\'some_filter_to_exclude_1\', \'some_filter_to_exclude_2\'];
}
function word_swap_wrapper($tag, $value = null){
add_filter($tag, \'word_swap\');
return $value;
}
add_filter(\'all\', \'word_swap_wrapper\');
function word_swap($value = null){
if( in_array( $tag, get_tags_to_exclude() ) ){
return $value;
}
// do whatever you want here
return changed_value;
}
如果你想彻底过滤所有东西,我想你不会想要它的。如果你想要你的功能
word_swap
要在执行所有其他回调后工作,可以使用如下优先级:
function get_tags_to_exclude(){
return [\'some_filter_to_exclude_1\', \'some_filter_to_exclude_2\'];
}
function word_swap_wrapper($tag, $value = null){
add_filter($tag, \'word_swap\', PHP_INT_MAX);
return $value;
}
add_filter(\'all\', \'word_swap_wrapper\');
function word_swap($value = null){
if( in_array( $tag, get_tags_to_exclude() ) ){
return $value;
}
// do whatever you want here
return changed_value;
}
我不知道有什么更好的方法来注册要在最后执行的回调,所以请为我修复任何人。
让我们看看函数word_swap_wrapper
, 它将注册word_swap
函数,以限制我们可以在注册之前检查它word_swap
一次又一次地为同一个标签。因此,最终解决方案将是:
function get_tags_to_exclude(){
return [\'some_filter_to_exclude_1\', \'some_filter_to_exclude_2\'];
}
function word_swap_wrapper($tag, $value = null){
static $lookup;
if(!$lookup){
$lookup = [];
} elseif( !isset($lookup[ $tag ]) ){
$lookup[ $tag ] = true;
add_filter($tag, \'word_swap\', PHP_INT_MAX);
}
return $value;
}
add_filter(\'all\', \'word_swap_wrapper\');
function word_swap($value = null){
if( in_array( $tag, get_tags_to_exclude() ) ){
return $value;
}
// do whatever you want here
return changed_value;
}
您可以找到WP预定义筛选器的不完整列表
here和
here