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

回答:


12

フィルターは、フックされた各コールバック関数を(優先順で)呼び出すことによって機能します。フィルタリングされる値は、最初のコールバック関数に渡されます。次に、そのコールバック関数の戻り値が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()) );

remove_filterを使用する必要がなく、その関数を再度呼び出す必要がない場合に、フィルターに匿名関数を使用しないことには、何らかの理由がありますか?
Ünsalコルクマズ

1
まあ、それらを使用しないことをお勧めします。2.拡張可能なコード。3. PHP 5.2ではサポートされていません。また、無名関数を使用するメリットはありません。
スティーブンハリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.