使用add_filter将新元素插入数组


8
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将新元素插入此数组。什么是正确的方法?

Answers:


12

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

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

旁注:避免将匿名函数用作回调)

尝试:

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()) );

如果您不需要使用remove_filter并且您不需要再次调用该函数,是否有充分的理由不对过滤器使用匿名函数?
Ünsal科尔克马兹

1
好的,不要使用它们,因为1.提高了可读性。2.可扩展的代码。3. PHP 5.2不支持它们。使用匿名函数没有任何好处。
史蒂芬·哈里斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.