apply_filters( $tag, $value, $var ... );
中,我无法将头缠绕在
$value
和$var
周围。我阅读了编解码器,听起来好像可以修改$value
,但不能修改,但是我还没有找到任何示例。它似乎用作传递变量的方法。在这种情况下,和$var
有什么区别?#1 楼
尝试查看具有更好名称的函数: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;
}
其他变量可以使您的决策变得更加容易,而不必更改这些决策。
#2 楼
什么是过滤器?过滤器是WordPress在执行某些操作之前(在将数据添加到数据库中或将其发送之前)通过数据传递的功能。到浏览器屏幕)。过滤器位于数据库和浏览器之间(当WordPress生成页面时),以及位于浏览器和数据库之间(当WordPress向数据库添加新帖子和评论时); WordPress中的大多数输入和输出都会通过至少一个过滤器。 WordPress默认进行一些过滤,您的插件可以添加自己的过滤。
连接到过滤器
,以便用户更改某些特定数据(
apply_filters
函数提供了一个值,一个函数的输出等)。这些过滤器钩包括过滤器的名称(或标签)以及至少用于过滤(例如,以某种方式更改数据。
要更改帖子的标题,可以使用
the_title
过滤器挂钩,其定义如下:apply_filters( 'the_title', $title, $id );
这意味着过滤器具有标签/名称
the_title
,第一个参数$title
是要更改的数据(即帖子标题),第二个参数$id
是额外信息(在这种情况下)帖子ID)。例如,要以大写字母显示每个帖子的标题,可以使用以下行:add_filter('the_title', 'strtoupper');
如果我们看一下
add_filter
函数,我们会发现e它的定义如下:add_filter( $tag, $function_to_add, $priority, $accepted_args );
我们仅指定了第一个和第二个(必需的)参数,而第三个和第四个参数设置为其各自的默认值(即
10
和1
)。更复杂的过滤器
如果您只想过滤某个帖子,则可以使用其他信息(如果使用此过滤器,则为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
,我们必须指定所有四个可用参数。
我需要哪些参数?
要标识某个过滤器的(数量)可用参数,您必须查看
参考文献:
插件API:过滤器
apply_filters
函数add_filter
函数评论
+1可获得全面回应和完美无缺的课程(格式精美的brochacho)!
– Bosco
2013年4月26日15:41
谢谢,这很彻底,但是并不能真正解释我的要求。例如。过滤器中$ value变量和$ var变量之间的差异。
–r00tAcc3ss
13年4月26日在16:20
嗯,我会说,确实如此,但这当然是我的主观感受。我将在过滤器及其参数上添加一些信息。
–tfrommen
13年4月26日在16:24
评论
如果我理解正确。我没有添加变量以从apply_filters收集返回的值,因为它已自动应用于$ value_to_change?
–r00tAcc3ss
13年4月26日在15:21
@ r00tAcc3ss没有任何自动发生。您必须在回调中更改值。如果需要,您还可以根据情况将其返回原样。
– fuxia♦
13年4月26日在15:33
哦耶。我的意思是,我不必将返回的值接受到另一个变量中并将其分配给$ value。如果我在挂钩函数中更改$ value并“自动”返回,就可以完成。
–r00tAcc3ss
13年4月26日在16:17