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.