$GLOBALS和GLOBAL不工作

时间:2018-03-10 作者:Geeocode

我有以下配置:

$GLOBALS[\'x\'] = 1;

add_filter( \'filter_hook\', \'my_function\', 10, 2 );
function my_function() {
    $GLOBALS[\'x\'] = 2;
}

add_action( \'action_hook\', \'my_function2\', 10, 2 );
function my_function2() {
    echo $GLOBALS[\'x\'];
}

OUTPUT:

1
我知道,动作挂钩总是在过滤器挂钩之后执行。

I除外2 因此。

EDITED:我必须使用这两个挂钩,因为它们还有其他几个任务要做。所以上面的代码只是一个权杖。我的问题是,我需要将数据转发到动作挂钩。

My question: Is there any scenario, which can cause this result?

任何帮助都将受到高度赞赏。

1 个回复
SO网友:user6552940

我认为你不应该使用$GLOBALS 完全add_filter 不应该用你现在使用的方式。

所以有apply_filter 在wordpress中返回filtered 值,以便

$my_variable = apply_filter(\'my_filter_tag\', \'default_value\', $arg1);
在上述代码中\'default_value\' 可以是任何东西
  • $my_variablehold 价值观\'default_value\' 如果没有人打电话add_filter(\'my_filter_tag\', \'my_function_name\', 10, 2)add_filter(\'my_filter_tag\', \'my_function_name\', 10, 2) 这意味着

    $my_variable = my_function_name(\'default_value\', $arg1); 以下是$my_variable 将等于my_function_name 因为我们注册了my_function_name 每次调用$my_variable 正在设置。

    要达到帖子中描述的预期效果,您可以执行以下操作:

    # This will set the value of $GLOBALS[\'x\'] = 1 by default if there are no hooks called.
    # $arg1 is optional but since you specified the value 2 when registering the filter I\'ve added it to the example to explain it
    $GLOBALS[\'x\'] = apply_filter(\'filter_hook\', 1, $arg1); 
    
    function my_function($x, $y) {
        # Here this function required two parameters
        # This function is being called by the filter_hook
        # So the value of $x will be equal to 1 ( Which is the default value)
        # $y will be $arg1
        return 2; # Notice that we\'re returning the value rather than setting it.
    }
    
    # Here the value 10 means priority and the value 2 means that the function 
    #`my_function` will be given two arguments when it is called, the first argument
    # for the called function will always be the \'default_value\'
    add_filter( \'filter_hook\', \'my_function\', 10, 2 );
    
    add_action( \'action_hook\', \'my_function2\', 10, 2 );
    function my_function2() {
        echo $GLOBALS[\'x\']; 
    }
    

  • 结束

    相关推荐

    theme functions (hooks)

    WordPress已经提出了这个问题,但没有答案。我只是想在这个论坛上试试,如果有人知道的话,因为我也有同样的问题。要使用jquery滑块编辑我的主题,如何转到该脚本?,显示“$主题->挂钩(\'content\\u before\');”在content div标记中。有人能帮忙吗?我的主题索引。php包含以下内容<div id=\"main\"> <?php $theme->hook(\'main_before\'); ?> &#x