通过筛选器或操作挂钩更改变量

时间:2013-09-11 作者:olly

看来我在理解add\\u action、add\\u filter和apply\\u filters的工作方式方面有问题。

简而言之,我有以下场景:

在模板文件中,我有

while ( $the_query->have_posts() ) : $the_query->the_post();
    /*get meta data for this post**/
    $meta=get_post_meta(get_the_ID(), $post_type, true );

    /***
        at this stage - amongst other things - print_r($meta) returns
        Array ( [prices] => Array ( [0] => 8 ) )
    ***/

    /**add add_action hook to change $meta (if possible)**/
    do_action(\'alter_loop\',$meta);

    /***
        AFTER executing this action I would like to have print_r($meta) return
        Array ( [prices] => Array ( [0] => 5 ) )
        but it still returns
        Array ( [prices] => Array ( [0] => 8 ) )
    ***/

    /* more things*/

endwhile;
在课堂上,我有以下几点:

function __construct() {
    add_action(\'alter_loop\', array( $this, \'alter_loop_meta\'),10,1);
}


function alter_loop_meta($meta){
    add_filter(\'some_identifier\',array($this,\'my_filter\'),10,1);
    $meta = apply_filters(\'some_identifier\',$meta);
    /***
        at this stage print_r($meta) DOES actually return
        Array ( [prices] => Array ( [0] => 8 ) )
    ***/

    return $meta;
}
function my_filter( $meta ) {
    $meta[\'prices\'][0]=\'8\';

    return $meta;
}
如果我使用

global $meta; 
它在模板文件中工作(我可以保存所有这些过滤,因为我可以在alter\\u loop\\u meta中设置$meta[\'prices\'][0]=“8”)。

然而,我想知道是否有一种方法可以在没有任何全局变量的情况下实现这一点。非常感谢任何提示/链接等,当然,如果需要,很乐意提供更多代码。。。

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

它不会像你这样工作,但你很接近。您必须使用global 就是您没有使用过滤器返回的信息设置$元变量。

这是:

do_action(\'alter_loop\',$meta);
应该是这样的:

$meta = apply_filters(\'alter_loop\',$meta);
注:“1”;“行动”;不要返回值"E;“行动”;做事"E;过滤器“;接受并返回数据。

相关:

https://wordpress.stackexchange.com/a/103644/21376
https://wordpress.stackexchange.com/a/1008/21376

结束

相关推荐

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

我试图根据调用的函数中的变量是否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\