apply_filters()

目录

    前两天学习了 add_filters() 函数,详见>>> add_filter()详解 ,今天趁热打铁再来学习下它的使用。一般情况下 add_filters() 有两种方式触发,一种是当程序运行到特定时候 WordPress 程序会判断用户是否对某些参数做了新的定义,如果有则优先使用用户的设置;另一种方式是,用户可以直接通过 apply_filters() 函数直接调用。代码示例如下:

    // 预定义的过滤器回调函数
    function example_callback( $string, $arg1, $arg2 ) {
        // (maybe) modify $string
        return $string;
    }
    add_filter( 'example_filter', 'example_callback', 10, 3 );
    // 通过 apply_filters() 传参调用定义好的过滤器回调函数
    $value = apply_filters( 'example_filter', 'filter me', $arg1, $arg2 );

    apply_filters() 有两个固定参数以及其他我们需要传递给过滤器回调函数的参数,其调用方法如下所示:

    apply_filters( string $tag, mixed $value,$var,... )

    $tag:必填(字符串)。过滤器钩子的名称。

    $value:必填(混合)。可以被过滤器函数修改的值要过滤的值,如果没人过滤则直接返回这个值。

    $var:可选(混合)传给过滤函数的额外的参数,辅助过滤函数对返回值进行操作,可以添加无限个。

    最后,apply_filters() 函数定义在 wp-includes/plugin.php 文件中,具体代码如下:

    function apply_filters( $tag, $value ) {
        global $wp_filter, $wp_current_filter;
        $args = array();
        // Do 'all' actions first.
        if ( isset($wp_filter['all']) ) {
            $wp_current_filter[] = $tag;
            $args = func_get_args();
            _wp_call_all_hook($args);
        }
        if ( !isset($wp_filter[$tag]) ) {
            if ( isset($wp_filter['all']) )
            array_pop($wp_current_filter);
            return $value;
        }
        if ( !isset($wp_filter['all']) )
            $wp_current_filter[] = $tag;
        if ( empty($args) )
            $args = func_get_args();
            // don't pass the tag name to WP_Hook
            array_shift( $args );
    	$filtered = $wp_filter[ $tag ]->apply_filters( $value, $args );
    	array_pop( $wp_current_filter );
        return $filtered;
    }

    文档参考:https://developer.wordpress.org/reference/functions/apply_filters/

    0 条回复 A文章作者 M管理员
      暂无讨论,说说你的看法吧
    个人中心
    购物车
    优惠劵
    今日签到
    有新私信 私信列表
    搜索