Perbedaan antara add_filter dan apply_filters


17

Saya telah mencari penjelasan yang cocok tentang perbedaan antara add_filter()dan apply_filters()di sini tetapi tidak dapat menemukannya.

Adakah yang bisa memberi tahu saya informasi atau logika apa yang perlu dipertimbangkan sebelum menggunakan add_filteratau apply_filtersdalam satu konteks.

Itu membuat penggunaan satu keharusan dan bukan yang lain?

  • Apakah benar bahwa add_filterhanya menambahkan fungsi ke antrian fungsi yang menunggu untuk dieksekusi pada variabel dan apply_filtersmenjalankan fungsi secara berurutan?

  • Apakah benar juga bahwa apply_filtersketika dipanggil dengan argumen (nama fungsi yang akan dijalankan) akan menjalankan fungsi itu sebelum semua yang lain (jika ada) dalam antrian?


2
Bagaimana dengan dokumentasi yang ada di sini dan di sini yang tidak menjelaskannya secara memadai untuk Anda?
t31os

3
Saya pikir ini sebenarnya pertanyaan yang bagus. Sebagai pengembang wordpress baru, ini bisa menjadi konsep yang membingungkan.
Shawn

Jawaban:


26

Sebagian besar dari yang berikut ini dapat ditemukan di Codex :


apply_filters

Fungsi panggil balik yang terlampir pada kait filter $tagdipanggil dengan memanggil fungsi ini. Fungsi ini dapat digunakan untuk membuat hook filter baru dengan hanya memanggil fungsi ini dengan nama hook baru yang ditentukan menggunakan parameter $ tag.

$value = apply_filters( $tag, $value, $var_1, $var_2, ... );

Pada intinya:
Anda menggunakan apply_filtersuntuk menyaring diberikan $value- sehubungan dengan nilai itu sendiri serta variabel opsional disediakan $var_1melalui $var_n.


add_filter

Kaitkan suatu fungsi ke aksi filter tertentu.

add_filter( $tag, $function_to_add, $priority, $accepted_args );

Intinya:
Anda menggunakan add_filteruntuk mengaitkan fungsi khusus ke aksi filter yang diberikan ( $tag), yang mungkin Anda hasilkan apply_filterssebelumnya (atau itu adalah tindakan filter bawaan atau berasal dari plugin / tema Anda).


Jadi, inilah contoh fiksi :

function print_initials( $name ) {

    if ( ! is_string( $name ) ) {
        return;
    }

    $fragments = explode( ' ', $name );

    /**
     * Filter wether to print initials in reverse order.
     *
     * @param bool $reverse Print initials in reverse order?
     */
    if ( apply_filters( 'reverse_initials', FALSE ) ) {
        $fragments = array_reverse( $fragments );
    }

    foreach ( $fragments as $f ) {
        echo substr( $f, 0, 1 );
    }
}

print_initials( 'Some Guy' ); // outputs: SG

add_filter( 'reverse_initials', '__return_true' );

print_initials( 'Some Guy' ); // outputs: GS

Sekarang, jika kita panggil fungsi kita apa adanya, inisial dicetak dari kiri ke kanan — karena inilah yang kita definisikan sebagai perilaku default.

Kedua kalinya, kami mendapatkan inisial dalam urutan terbalik — karena fungsi filter __return_true, yang dikaitkan dengan aksi filter kami, selalu kembali TRUEdan dengan demikian membuat inisial menjadi output dari kanan ke kiri.


3
Ini adalah jawaban yang bagus dan menunjukkan bagaimana Anda dapat mengganti filter. Terima kasih.
Shawn
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.