add_filter()
和apply_filters()
之间的区别的适当解释,但找不到。有人可以告诉我在一种情况下使用
add_filter
或apply_filters
之前要考虑哪些信息或逻辑。 这使得必须使用一项而不是另一项?
add_filter
只是将一个函数添加到等待在变量上执行的功能队列中,并且apply_filters
按顺序执行这些功能是否正确?是否也正确?
apply_filters
当用参数(要运行的函数的名称)调用时,将在队列中的所有其他函数(如果存在)之前执行该函数吗?#1 楼
以下大多数内容都可以在Codex中找到:apply_filters
附加到过滤器挂钩
$tag
的回调函数通过调用此函数来调用。通过使用$ tag参数指定的新钩子名称简单地调用此函数,可以使用此函数创建新的过滤器钩子。$value = apply_filters( $tag, $value, $var_1, $var_2, ... );
本质上:
您可以使用
apply_filters
来过滤给定的$value
-关于值本身以及可选的变量$var_1
至$var_n
。add_filter
将函数挂钩到特定的过滤器动作。
add_filter( $tag, $function_to_add, $priority, $accepted_args );
本质上:
使用
add_filter
进行挂钩给定过滤器动作($tag
)的自定义函数,它可能是apply_filters
之前生成的(或者它是内置过滤器动作或源自于插件/您的主题)。所以,这是一个虚构的示例:
function print_initials( $name ) {
if ( ! is_string( $name ) ) {
return;
}
$fragments = explode( ' ', $name );
/**
* Filter wether to print initials in reverse order.
*
* @param bool $reverse Print initials in reverse order?
*/
if ( apply_filters( 'reverse_initials', FALSE ) ) {
$fragments = array_reverse( $fragments );
}
foreach ( $fragments as $f ) {
echo substr( $f, 0, 1 );
}
}
print_initials( 'Some Guy' ); // outputs: SG
add_filter( 'reverse_initials', '__return_true' );
print_initials( 'Some Guy' ); // outputs: GS
现在,如果我们按原样调用函数,则首字母从左到右打印-因为这就是我们将其定义为默认行为。
第二次,我们得到了初始行为s的顺序相反-因为连接到我们的过滤器操作的过滤器函数
__return_true
始终返回TRUE
,因此使首字母从右向左输出。评论
这是一个很好的答案,它说明了如何覆盖过滤器。谢谢。
–肖恩
2014年9月29日在18:01
评论
那么这里和这里的现有文档又如何不能为您充分解释呢?我认为这实际上是一个好问题。作为新的wordpress开发者,这可能是一个令人困惑的概念。