理解应用过滤器()时遇到问题

时间:2013-04-26 作者:r00tAcc3ss

在apply\\u filters()中

apply_filters( $tag, $value, $var ... );
我的头在$value$var. 我读了抄本,听起来像$value 可以修改,$var 没有,但我还没有在野外找到这样的例子。它似乎是用来传递变量的一种方式。在这种情况下,这和$var?

2 个回复
最合适的回答,由SO网友:fuxia 整理而成

尝试使用更好的名称查看函数:

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, \'callback\' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);
因此,当该函数被称为:

// wp-login.php line 94
apply_filters( \'login_body_class\', $classes, $action );
您可以使用…

add_filter( \'login_body_class\', \'function_to_change_login_body_class\', 10, 2 );
…并将两个变量传递给该函数。返回第一个,第二个只提供更多上下文:

function function_to_change_login_body_class( $classes, $action )
{
    if ( \'login\' === $action )
        $classes[] = \'foo\';

    if ( \'postpass\' === $action )
        $classes[] = \'bar\';

    return $classes;
}
这些额外的变量是为了让你的决策更容易,而不是为了改变这些。

SO网友:tfrommen

什么是过滤器

Filters 是WordPress在执行过程中的某些点,在对数据执行某些操作(例如将数据添加到数据库或发送到浏览器屏幕)之前传递数据的函数。过滤器位于数据库和浏览器之间(WordPress生成页面时),以及浏览器和数据库之间(WordPress向数据库添加新帖子和评论时);WordPress中的大多数输入和输出都通过至少一个过滤器。WordPress默认情况下会进行一些过滤,您的插件可以添加自己的过滤。

挂钩到过滤器中,以便用户更改某些特定数据(值、函数输出等)。过滤器挂钩通过apply_filters 功能
这些过滤器挂钩包括过滤器的名称(或标签)以及至少用于过滤(即以某种方式更改)数据的函数名。

要更改帖子的标题,可以使用the_title 过滤器挂钩,定义如下:

apply_filters( \'the_title\', $title, $id );
这意味着过滤器具有标记/名称the_title, 第一个参数$title 是要更改的数据(即文章标题)和第二个参数$id 是额外信息(在本例中是post ID)。

要显示title of every post 例如,在大写字母中,可以使用以下行:

add_filter(\'the_title\', \'strtoupper\');
如果我们看看add_filter 函数,我们看到它的定义如下:

add_filter( $tag, $function_to_add, $priority, $accepted_args );
我们只指定了第一个和第二个(必需)参数,而第三个和第四个参数设置为其各自的默认值(即。,101).

更复杂的过滤器filter only a certain post, 您可以使用额外的信息(对于此筛选器:ID)。为此,必须指定参数的数量(在本例中为2),并且为了再次执行此操作,必须指定优先级参数(位于参数数量之前)。

假设我们只想影响ID为42的帖子的标题,那么它如下所示:

add_filter(\'the_title\', \'my_strtoupper\', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper
在这种情况下,我们必须指定所有四个可用参数。

我有哪些参数

要识别某个过滤器的可用参数(数量),必须查找其定义位置(在本例中:here).

<小时>References:

结束

相关推荐

如何访问调用Apply_Filters()的函数中的变量?

我试图根据调用的函数中的变量是否apply_filters() 等于特定值。该变量不会传递给apply_filters() 参数。这或许可以解释我的意思:// function in wordpress core function get_var_b() { // generating $var_a $var_a = \"a\"; // some code ... $var_b = apply_filters(\'get_var_b\