当前浏览:首页 / WordPress函数 / apply_filters()

apply_filters( string $hook_name, mixed $value, mixed $args )

调用已添加到过滤器钩子的回调函数

filter 过滤


描述

此函数调用连接到过滤器钩子$hook_name的所有函数。只需调用此函数,使用$hook_name参数作为新钩子的名称,就可以创建新的过滤器挂钩。

该函数还允许将多个附加参数传递给钩子。

用法示例:

// 过滤器回调函数
function example_callback( $string, $arg1, $arg2 ) {
    // (可能) 修改 $string.
    return $string;
}
add_filter( 'example_filter', 'example_callback', 10, 3 );

/*
 * 通过调用 'example_callback()' 函数,应用过滤器
 * 上面钩住了 `example_filter`
 *
 * - 'example_filter' 是过滤器钩子名称
 * - 'filter me' 被过滤的值
 * - $arg1 和 $arg2 是传递给回调函数的附加参数
$value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );

参数

$hook_name

(string)(必填) 过滤器钩子的名称。

$value

(mixed)(必填) 要过滤的值。

$args

(mixed)(必填) 传递给回调函数的其他参数。


返回

(mixed) 所有钩子函数应用于过滤后的值。



源码

查看源码 官方文档


更新日志

版本描述
6.0.0通过将...$args参数添加到函数签名中,将其形参化。
0.71开始引入

使用示例

  • 示例1

    过滤后的回显

    echo apply_filters( $tag, $value );
    

    过滤

    $myvar = apply_filters( $tag, $value );
    

    附加过滤器参数

    $myvar = apply_filters( $tag, $value, $param, $otherparam );
    

    例如:

    $myvar = apply_filters( 'example_filter', 'filter me', 'arg1', 'arg2 ');
    

    使用the_title过滤器

    $my_custom_title = apply_filters('the_title', '  My Custom Title (tm)  ');
    $my_custom_title will now contain 'My Custom Title ™', since the_title filter applies wptexturize() and trim(), among others.
    
  • 示例2

    一个容易忽略的基本参数是指定参数的数量。大多数过滤器只有一个参数,因此人们从add_filter中删除该参数。

    下面的3非常重要。

    add_filter( 'example_filter', 'example_callback', 10, 3 );
    

    否则会出现以下错误,例如此StackOverflow问题(http://stackoverflow.com/questions/24198086/missing-argument-2-for-the-function-in-wordpress):

    example_callback()缺少参数2

  • 示例3

    通过阅读此函数的定义和描述,不明显的一点是,如果add_filter( 'filter_name', 'filter_function' )在代码中从来都不是被调用/执行的,则默认情况下apply_filters( 'filter_name', $value )的使用将返回$value值。

    我注意到在我的主题的functions.php文件中有一个对apply_filters( 'my_filter', ... )的调用,在其他任何地方都找不到类似add_filter( 'my_filter', ... )的调用,我对此感到很困惑(我还在为过滤器/钩子的问题伤脑筋)。

  • 示例4

    说明中的第二行在技术上不正确:

    “只需调用此函数,就可以创建新的过滤器挂钩…”

    apply_filters不创建筛选器挂钩。阅读https://stackoverflow.com/q/72161547/3429430详细信息