问题描述

我在这里搜索了 add_filter()apply_filters()之间的差异的合适解释,但找不到。

任何人都可以告诉我在一个上下文中使用 add_filterapply_filters 之前要考虑的信息或逻辑。

那使得一个命令而不是另一个呢?

  • add_filter 是否正确添加一个函数到等待在一个变量上执行的函数,apply_filters 按顺序执行函数?

  • apply_filters 在调用参数 (要运行的函数的名称) 时是否会在队列中的所有其他函数 (如果存在) 之前执行该函数也是正确的?

最佳解决方案

以下大部分内容可以在 Codex 中找到:


apply_filters

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


add_filter

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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。