如何访问调用Apply_Filters()的函数中的变量?

时间:2012-09-25 作者:Ahmad M

我试图根据调用的函数中的变量是否apply_filters() 等于特定值。该变量不会传递给apply_filters() 参数。这或许可以解释我的意思:

// function in wordpress core
function get_var_b() {
    // generating $var_a
    $var_a = "a";
    // some code ...
    $var_b = apply_filters(\'get_var_b\', $var_b);
    return $bar_b;
}

// in functions.php
add_filter(\'get_var_b\', \'filter_var_b\');
function filter_var_b($var_b) {
    if ($var_a == "c") {
        $var_b = "d";
    }
    return $var_b;
}
我试着用global $var_a; 在我的职能范围内,但没有成功。我能进入的唯一途径$var_a 通过编辑核心文件并传递$var_aapply_filters() 功能如下:

apply_filters(\'get_var_b\', $var_b, $var_a);
有没有一种方法可以在不编辑核心文件或尝试从头重新生成$var\\u a的情况下访问此变量?谢谢

EDIT: 我尝试连接的过滤器是dynamic_sidebar_params 从中调用dynamic_sidebar() 中的函数wp-includes/widgets.php 文件我正在尝试改变$params[0][\'before_widget\'] 从…起<aside><nav> 如果$id 等于categories-2.

1 个回复
最合适的回答,由SO网友:EAMann 整理而成

简短回答:you can\'t.

您试图访问超出其范围的变量。在你的情况下,$var_a 是本地的get_var_b() 函数,因此该函数之外的任何对象都无法看到它。

这相当于在PHP中编写此序列:

function get_var_b() {
    // This variable is local to the function and invisible outside of it.
    $var_a = "a";  

    // Call a function that returns some value while passing in some default value.
    $var_b = create_var_b( \'default\' ); 

    return $var_b;
}

function create_var_b( $default = null ) {
    // Inside this function, we only have access to $default because that\'s all that was passed
    // in. You can access any set global variables my making an explicit reference to 
    // "global $var", but only if the variable was globalized in its original scope.

    if ($default != null) {
        $var_b = "d";
    } else {
        $var_b = "c";
    }

    return $var_b;
}

结束