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