在apply_filters()中
apply_filters( $tag, $value, $var ... );
我在将头缠绕在$value
和上时遇到麻烦$var
。我阅读了抄本,听起来好像$value
可以修改了$var
,但是我还没有在野外找到任何示例。它似乎用作传递变量的方法。在那种情况下,那和$var
?有什么区别?
在apply_filters()中
apply_filters( $tag, $value, $var ... );
我在将头缠绕在$value
和上时遇到麻烦$var
。我阅读了抄本,听起来好像$value
可以修改了$var
,但是我还没有在野外找到任何示例。它似乎用作传递变量的方法。在那种情况下,那和$var
?有什么区别?
Answers:
尝试查看具有更好名称的函数:
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;
}
附加变量可以使您的决策变得更加容易,而不必更改这些决策。
过滤器是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
函数,我们看到它的定义如下:
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
在这种情况下,我们必须指定所有四个可用参数。
要确定某个过滤器的可用参数(数量),您必须查找其定义位置(在这种情况下:此处)。
参考文献:
apply_filters
功能add_filter
功能