Pemahaman masalah apply_filters ()

19

Dalam apply_filters ()

apply_filters( $tag, $value, $var ... );

Saya mengalami kesulitan membungkus kepala saya di sekitar $valuedan $var. Saya membaca codex dan sepertinya $valuebisa dimodifikasi, $vartidak, tapi saya belum menemukan contoh ini di alam liar. Tampaknya digunakan sebagai cara untuk melewatkan variabel. Dalam hal apa, apa perbedaan antara itu dan $var?

r00tAcc3ss
sumber

Jawaban:

35

Coba lihat fungsinya dengan nama yang lebih baik:

apply_filters(
    $filter_name,     // used for add_filter( $filter_name, 'callback' );
    $value_to_change, // the only variable whose value you can change
    $context_1,       // context
    $context_2        // more context
);

Jadi ketika fungsi itu disebut sebagai:

// wp-login.php line 94
apply_filters( 'login_body_class', $classes, $action );

Kamu bisa memakai …

add_filter( 'login_body_class', 'function_to_change_login_body_class', 10, 2 );

... dan dapatkan dua variabel yang diteruskan ke fungsi itu. Anda mengembalikan yang pertama, yang kedua menyediakan lebih banyak konteks:

function function_to_change_login_body_class( $classes, $action )
{
    if ( 'login' === $action )
        $classes[] = 'foo';

    if ( 'postpass' === $action )
        $classes[] = 'bar';

    return $classes;
}

Variabel tambahan ada di sana untuk membuat keputusan Anda lebih mudah, bukan untuk mengubahnya juga.

fuxia
sumber
Jika saya mengerti dengan benar. Saya tidak menambahkan variabel untuk mengumpulkan nilai yang dikembalikan dari apply_filters karena diterapkan pada $ value_to_change secara otomatis?
r00tAcc3ss
@ r00tAcc3ss Tidak ada yang terjadi secara otomatis. Anda harus mengubah nilai dalam panggilan balik Anda. Anda juga dapat mengembalikannya jika Anda mau - tergantung pada konteksnya.
fuxia
Oh ya. Maksud saya, saya tidak harus menerima nilai yang dikembalikan ke variabel lain dan menugaskannya ke nilai $. Itu dilakukan, jika saya mengubah nilai $ dalam fungsi yang dikaitkan dan kembali, "secara otomatis."
r00tAcc3ss
11

Apa itu Filter?

Filter adalah fungsi yang WordPress lewati melalui data, pada titik-titik tertentu dalam eksekusi, tepat sebelum mengambil tindakan dengan data (seperti menambahkannya ke database atau mengirimnya ke layar browser). Filter berada di antara database dan browser (saat WordPress menghasilkan halaman), dan antara browser dan database (ketika WordPress menambahkan posting dan komentar baru ke database); sebagian besar input dan output di WordPress melewati setidaknya satu filter. WordPress melakukan beberapa penyaringan secara default, dan plugin Anda dapat menambahkan penyaringan sendiri.

Menghubungkan ke Filter

Untuk memungkinkan pengguna mengubah beberapa data tertentu (nilai, output fungsi, dll.) Kait filter disediakan melalui apply_filtersfungsi.
Kait filter ini menyertakan nama (atau tag ) filter dan setidaknya nama fungsi yang akan digunakan untuk memfilter (yaitu, mengubah cara) data.

Untuk mengubah judul posting, Anda dapat menggunakan the_titlehook filter, yang didefinisikan sebagai berikut:

apply_filters( 'the_title', $title, $id );

Ini berarti, filter memiliki tag / nama the_title, parameter pertama $titleadalah data yang akan diubah (yaitu, judul posting) dan parameter kedua $idadalah informasi tambahan (dalam hal ini ID posting).

Untuk menampilkan judul setiap posting di UPPERCASE, misalnya, Anda dapat menggunakan baris berikut:

add_filter('the_title', 'strtoupper');

Jika kita melihat add_filterfungsinya, kita melihatnya didefinisikan sebagai berikut:

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

Kami hanya menentukan parameter pertama dan kedua (wajib), sedangkan parameter ketiga dan keempat diatur ke nilai default masing-masing (yaitu, 10dan 1).

Filter Yang Lebih Kompleks

Jika Anda ingin memfilter hanya posting tertentu , Anda dapat menggunakan informasi tambahan (jika filter ini: ID). Untuk melakukannya, Anda harus menentukan jumlah parameter (yaitu 2 dalam hal ini), dan untuk melakukannya lagi, Anda harus menentukan parameter prioritas (yang muncul sebelum jumlah argumen).

Misalkan kita hanya ingin mempengaruhi judul posting dengan ID 42, maka tampilannya seperti ini:

add_filter('the_title', 'my_strtoupper', 10, 2);
function my_strtoupper($title, $id) {
    if (42 === $id) return strtoupper($title);
    return $title;
} // function my_strtoupper

Dalam hal ini, kita harus menentukan keempat parameter yang tersedia.

Apa Parameter Yang Saya Miliki?

Untuk mengidentifikasi (jumlah) parameter yang tersedia dari filter tertentu, Anda harus mencari di mana ia didefinisikan (dalam hal ini: di sini ).


Referensi :

para pria
sumber
2
+1 untuk respons menyeluruh dan kelas tanpa cela (brochacho pemformatan bagus)!
bosco
Terima kasih, itu sangat menyeluruh, tetapi tidak benar-benar menjelaskan apa yang saya tanyakan. misalnya. perbedaan antara variabel $ value dan $ var di filter.
r00tAcc3ss
Hm, saya akan mengatakan, ya, tapi itu, tentu saja, perasaan subjektif saya. Saya akan menambahkan beberapa informasi tentang filter dan parameternya.
tfrommen