如何将争论传递给apply_filters?

时间:2017-09-17 09:27:25

标签: wordpress

以下是该方案:

 if( apply_filters( 'example_filter', false, $type ) ) {
        // do something
 }

我想在$type块内提供// do something或从callback_function传递。

$type = 'select';
function callback_function( $bool, $type ) {
    return true;  
}
add_filter( 'example_filter', 'callback_function', 10, 2 );

如何通过callback_function范围内apply_filters范围内的争论?

1 个答案:

答案 0 :(得分:0)

不幸的是,您无法从WordPress中的apply_filters函数(参考与否)传递其他变量,但是,有几种解决方法。如果您的代码是为处理它而设计的,那么您的第二个参数(从apply_filters调用返回的过滤器名称之后的参数)可以更改为非布尔值或全局变量(不推荐):

$type = 'select';
if( false !== ($type = apply_filters( 'example_filter', false, $type ))  ) {
    // Returned $type available here (if it is not boolean false)
}

定义:

function callback_function( $type ) {

    if( /* is valid conditional */ ) {
        return $type; // Default value
    } else if ( /* another valid condition */ ) {
        return 'radio';
    }

    // else not valid
    return false;  
}
add_filter( 'example_filter', 'callback_function', 10 );

另一种方法是使用全局变量(不推荐):

$GLOBALS['type'] = 'select';
if( apply_filters( 'example_filter', false ) ) {
    // $GLOBALS['type'] available here
}

定义:

function callback_function( $bool ) {
    global $type;
    $type = 'radio';
    return true;  
}
add_filter( 'example_filter', 'callback_function', 10 );

参考:https://www.geeklab.info/2010/04/wordpress-pass-variables-by-reference-with-apply_filter/