添加筛选器和应用筛选器之间的区别

时间:2014-01-30 作者:hanachi

我已经找到了一个合适的解释add_filter()apply_filters() 在这里,但找不到。

有人能告诉我在使用之前要考虑哪些信息或逻辑吗add_filterapply_filters 在一种情况下。

这使得使用一个命令而不是另一个命令?

是否正确add_filter 只需将函数添加到等待在变量上执行的函数队列中apply_filters 按顺序执行函数?

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

1 个回复
SO网友:tfrommen

以下大部分内容可以在Codex:<人力资源>apply_filters

附加到过滤器挂钩的回调函数$tag 通过调用此函数调用。这个函数可以用来创建一个新的过滤器挂钩,只需使用$tag参数指定的新挂钩的名称调用这个函数。

$value = apply_filters( $tag, $value, $var_1, $var_2, ... );
In essence:
您使用apply_filters 过滤给定的$value - 关于值本身以及可选提供的变量$var_1 通过$var_n.<人力资源>add_filter

将函数挂接到特定的筛选器操作。

add_filter( $tag, $function_to_add, $priority, $accepted_args );
In essence:
您使用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
现在,如果我们按原样调用函数,则从左到右打印首字母&mdash;因为这就是我们定义的默认行为。

第二次,我们按相反的顺序得到首字母&mdash;因为过滤器功能__return_true, 连接到我们的筛选操作,总是返回TRUE 从而使首字母从右向左输出。

结束

相关推荐

private functions in plugins

我开发了两个插件,其中一个功能相同(相同的名称,相同的功能)。当试图激活两个插件时,Wordpress会抛出一个错误,因为它不允许我以相同的名称定义函数两次。有没有一种方法可以使这个函数只对插件私有,而不使用面向对象编程,也不简单地重命名函数?我不想使用OOP,因为我首先要学习它。此外,我不想重命名该函数,因为我可能也想在其他插件中使用它,而重命名感觉不太合适。