Sisipkan elemen baru ke array dengan 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()) );

Hasilnya adalah

Array ( [0] => tax3 ) 

Saya tidak tahu bagaimana saya bisa memasukkan elemen baru ke array ini dengan add_filter. Apa cara yang tepat?

Ünsal Korkmaz
sumber

Jawaban:

12

Filter bekerja dengan memanggil setiap fungsi panggilan balik yang dikaitkan (dalam urutan prioritas). Nilai yang akan disaring diteruskan ke fungsi panggilan balik pertama. Nilai yang dikembalikan dari fungsi panggilan balik itu kemudian diteruskan ke panggilan balik kedua, dan nilai yang dikembalikan dari yang diteruskan ke ketiga dan seterusnya, sampai semua panggilan balik yang dikaitkan telah dipecat. Apa pun nilai yang dikembalikan terakhir (yaitu nilai yang difilter setelah melewati semua panggilan balik) kemudian dianggap sebagai nilai setelah filter diterapkan.

Dalam contoh di atas, setiap filter mengabaikan apa yang diteruskan ke sana, dan sebaliknya hanya mengembalikan array baru sendiri.

( Catatan samping: hindari fungsi anonim sebagai panggilan balik)

Mencoba:

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()) );
Stephen Harris
sumber
apakah ada alasan bagus untuk tidak menggunakan fungsi anonim untuk filter jika Anda tidak perlu menggunakan remove_filter dan jika Anda tidak perlu memanggil fungsi itu lagi?
Ünsal Korkmaz
1
Nah, praktik yang baik untuk tidak menggunakannya karena 1. Peningkatan keterbacaan. 2. Kode yang dapat diperpanjang. 3. Mereka tidak didukung di PHP 5.2. Dan tidak ada manfaat menggunakan fungsi anonim.
Stephen Harris