问题描述

add_filter('example_filter', function(){ return array( 'tax1' ); } );
add_filter('example_filter', function(){ return array( 'tax2' ); } );
add_filter('example_filter', function(){ return array( 'tax3' ); } );

print_r( apply_filters( 'example_filter', array()) );

结果是

Array ( [0] => tax3 ) 

我不知道如何使用 add_filter 将新元素插入到这个数组中。什么是正确的方法?

最佳解决方案

通过调用每个挂钩回调函数 (优先级顺序),过滤器工作。要过滤的值被传递到第一个回调函数。然后将该回调函数的返回值传递给第二个回调,并将返回的值传递到第三个回调函数,依此类推,直到所有挂钩回调被触发。无论最后一个返回值是多少 (即已经通过所有回调的已过滤值) 都被视为应用过滤器后的值。

在上面的例子中,每个过滤器都忽略了传递给它的内容,而只是返回自己的新数组。

(旁注:避免匿名函数作为回调)

尝试:

add_filter('example_filter', 'my_example_filter_1' );
function my_example_filter_1( $array ){
    $array[]='tax1';
    return $array;
}
add_filter('example_filter', 'my_example_filter_2' );
function my_example_filter_2( $array ){
    $array[]='tax2';
    return $array;
}
add_filter('example_filter', 'my_example_filter_3' );
function my_example_filter_3( $array ){
    $array[]='tax3';
    return $array;
}

print_r( apply_filters( 'example_filter', array()) );

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。