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でこの配列に新しい要素を挿入する方法を理解できませんでした。適切な方法は何ですか?
フィルタはフックされた各コールバック関数を(優先度順に)呼び出すことによって機能します。フィルタリングされる値は最初のコールバック関数に渡されます。そのコールバック関数の戻り値は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()) );