問題描述

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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。