问题描述
我在这里搜索了 add_filter()
和 apply_filters()
之间的差异的合适解释,但找不到。
任何人都可以告诉我在一个上下文中使用 add_filter
或 apply_filters
之前要考虑的信息或逻辑。
那使得一个命令而不是另一个呢?
-
add_filter
是否正确添加一个函数到等待在一个变量上执行的函数,apply_filters
按顺序执行函数? -
apply_filters
在调用参数 (要运行的函数的名称) 时是否会在队列中的所有其他函数 (如果存在) 之前执行该函数也是正确的?
最佳解决方案
以下大部分内容可以在 Codex 中找到:
The callback functions attached to filter hook
$tag
are invoked by calling this function. This function can be used to create a new filter hook by simply calling this function with the name of the new hook specified using the $tag parameter.
$value = apply_filters( $tag, $value, $var_1, $var_2, ... );
实质上:您使用 apply_filters
过滤给定的 $value
– 相对于值本身以及可选提供的变量 $var_1
通过 $var_n
。
Hook a function to a specific filter action.
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
现在,如果我们只是按照我们的函数调用,则首字母从左到右打印,因为这是我们定义为默认行为。
第二次,我们以相反的顺序取得首字母,因为过滤器函数__return_true
挂钩到我们的过滤器动作,总是返回 TRUE
,从而使得从右到左输出首字母。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。