2017-09-17 64 views
0

下面是这种情况:如何将参数传递给apply_filters?

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); 

如何传递从内部apply_filters范围callback_function的arguement?

回答

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/