web-dev-qa-db-ja.com

add_filterで配列に新しい要素を挿入します

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でこの配列に新しい要素を挿入する方法を理解できませんでした。適切な方法は何ですか?

7
Ünsal Korkmaz

フィルタはフックされた各コールバック関数を(優先度順に)呼び出すことによって機能します。フィルタリングされる値は最初のコールバック関数に渡されます。そのコールバック関数の戻り値は2番目のコールバックに渡され、そこから返された値はすべてのフックされたコールバックが起動されるまで3番目以降に渡されます。最後に返された値が何であれ(すなわち、すべてのコールバックを通過したフィルタリング済みの値)、フィルタが適用された後の値になります。

上記の例では、各フィルタは渡されたものを無視し、代わりに独自の新しい配列を返します。

サイドノート: コールバックとしての無名関数を避ける)

試してください:

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()) );
9
Stephen Harris