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