Penjelasan untuk fungsi apply_filters dan variabel-variabelnya

16

Saya sedang belajar bagaimana membangun formulir html menggunakan PHP dengan mengambil contoh dari plugin "simplr form Registration".

Saya melihat kode ini:

$form .= apply_filters('simplr-reg-instructions', __('Please fill out this form to sign up for this site', 'simplr-reg'));

Bisakah Anda jelaskan apa yang terjadi di sini - apa fungsinya, mengapa perlunya 'simplr-reg-instructions' dan 'simplr-reg'?

Mengapa garis ini tidak bisa begitu saja:

$form .= 'Please fill out this form to sign up for this site' ;

Saya sudah membaca referensi fungsi tetapi masih belum bisa mengetahuinya.

Abu
sumber

Jawaban:

22

Baris itu menggunakan dua fungsi berbeda yang membutuhkan dua penjelasan terpisah.

__ ()

Ini adalah fungsi terjemahan. Jika pengaturan dilakukan dengan benar, itu akan menerjemahkan parameter pertama dari daftar string yang telah diterjemahkan sebelumnya. Jika suatu instalasi memiliki file dengan terjemahan yang dikompilasi untuk digunakan fungsi ini, itu akan menggunakannya. Tentu saja, plugin harus mengemas terjemahannya sendiri, maka parameter kedua. simplr-regmemberitahu __()bahwa terjemahan string 'Please fill out this form to sign up for this site'harus dalam file terjemahan yang terkait 'simplr-reg'(ini dilakukan sebelumnya dalam plugin dengan menggunakan load_plugin_textdomain()fungsi).

Fungsi kemudian mengembalikan terjemahan. Jika tidak ada terjemahan yang dikembalikan (mis. Bahasa saat ini tidak memiliki terjemahan yang dikompilasi, string tidak memiliki terjemahan yang dikompilasi untuk paket itu, dll.), Input asli dikembalikan.

Jadi untuk situs WordPress dalam bahasa Inggris, __( 'This', 'simplr-reg' )secara fungsional sama dengan 'This'. Untuk mempelajari lebih lanjut tentang l10n (Pelokalan), bacalah di dalam kodeks:

http://codex.wordpress.org/I18n_for_WordPress_Developers

apply_filters ()

Fungsi ini memungkinkan Anda untuk memfilter nilai yang digunakan oleh plugin sesuai kebutuhan. Ini adalah salah satu konsep utama yang harus dipahami sebagai pengembang plugin. WordPress diperluas melalui pengait, yang pada dasarnya adalah titik akses yang memungkinkan Anda menentukan waktu pelaksanaan tindakan plugin Anda dan / atau memanipulasi informasi / data yang digunakan WordPress, dll.

Untuk memanipulasi data seperti cuplikan kode yang Anda tanyakan, Anda akan menggunakan fungsinya add_filter(). Inilah contoh dasar bagaimana ini bekerja:

add_filter( 'simplr-reg-instructions', 'wpse16573_my_filter' );

Anda mungkin akan mengenali argumen pertama di sana. Itu sama dengan yang digunakan di add_filteratas. Ini adalah nama pengait. Argumen kedua adalah panggilan balik filter. Itu harus berupa panggilan balik yang valid ke suatu fungsi ( baca lebih lanjut tentang panggilan balik di sini ). Baris kode itu mengatakan "Ketika 'simplr-reg-instructions'hook dieksekusi, jalankan fungsinya dengan callback yang saya berikan." apply_filters()mengeksekusi hook yang ditemukan dalam argumen pertamanya, pada dasarnya berarti "menjalankan semua fungsi yang terdaftar untuk hook ini." apply_filterslalu meneruskan semua argumen lain (dalam hal ini, 'Please fill out this form to sign up for this site') ke fungsi pada filter itu. Jadi, panggilan balik yang saya gunakan di atas akan terlihat seperti ini:

function wpse16573_my_filter( $text ){
  $text = "<strong>$text</strong>";
  return $text;
}

Ada dua jenis kait di WordPress: filter (jenis yang kami gunakan di sini) dan tindakan. Perbedaan utama antara keduanya adalah filter berharap Anda mengembalikan sesuatu dan tindakan tidak. Jadi, untuk filter ini, contoh saya di atas menambahkan beberapa html sekitar 'Please fill out this form to sign up for this site'dan mengembalikannya.

Baca lebih lanjut tentang tindakan dan kaitan di sini:

http://codex.wordpress.org/Plugin_API

John P Bloch
sumber
John, terima kasih banyak. Jawaban bagus! Tapi sepertinya saya tidak dapat menemukan satu pun baris "add_filter ('simplr-reg-instructions', ..." dalam file plugin. Bagaimana menjalankan apply_filter daripada?
Ash
1
Jika tidak ada filter yang ditambahkan ke hook, itu hanya mengembalikan input asli segera kembali. Filter tidak ada di sana untuk digunakan plugin, itu ada di sana bagi Anda untuk dapat digunakan jika Anda perlu / ingin sehingga Anda tidak perlu memodifikasi plugin itu sendiri.
John P Bloch
+1 Penjelasan Luar Biasa - Membaca Seperti Seharusnya Docs ;-)
Eddie B
+1 Jawaban yang bagus, persis apa yang saya cari, saya menjadi sangat bingung tapi sekarang semuanya sudah jelas;)
doz87
5

Anda memiliki dua fungsi berbeda di sini apply_filtersdan__()

fungsi apply_filters adalah cara WordPress untuk membiarkan Anda mengubah / mengedit nilai variabel menggunakan fungsi callback Anda sendiri dan add_filterfungsinya. ia menerima banyak argumen tetapi yang penting adalah yang pertama:

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

$ tag adalah nama hook filter yang digunakan dalam add_filtermisalnya:

add_filter($tag,callback_function);

$ value adalah nilai aktual yang dapat Anda ubah atau edit.

$ var adalah variabel yang dapat digunakan fungsi panggil balik Anda, satu atau lebih.

__() fungsi digunakan untuk terjemahan:

__($message,$text_domain);

$ message adalah pesan aktual untuk diterjemahkan.

$ text_domain adalah tag domain teks yang digunakan untuk memuat plugin atau terjemahan tema load_plugin_textdomain()

apa fungsinya?

Ini mencari modul lokalisasi untuk terjemahan $ message, dan meneruskan terjemahan ke pernyataan pengembalian PHP. Jika tidak ditemukan terjemahan untuk $ message, ia hanya mengembalikan $ message.

Jadi sekarang dua fungsi dalam case Anda bekerja dengan cara yang sama, apply_filters akan mengirimkan fungsi panggilan balik apa pun yang terkait dengan simplr-reg-instructionsfilter hook nilai yang diterjemahkan (jika ada) dari 'Silakan isi formulir ini untuk mendaftar ke situs ini' menggunakan teks- domain darisimplr-reg

Bainternet
sumber
Bainternet, terima kasih banyak! Bagaimana saya tidak dapat menemukan baris "add_filter ('simplr-reg-instructions'," dalam file plugin?
Ash
Ini adalah hook kiri untuk pengembang yang ingin memperluas atau memfilter fungsionalitas plugin.
Bainternet
Jadi add_filter tidak diharapkan di sini? Saya tidak mengerti mengapa. Tidakkah seharusnya apply_filters menjalankan semua fungsi yang terkait dengan hook-nya oleh fungsi add_filter?
Ash
apply_filtersadalah place holder yang memungkinkan Anda mengaitkan fungsi Anda sendiri menggunakan add_filter, jadi tidak ada add_filter tidak diharapkan kecuali Anda menambahkan milik Anda sendiri
Bainternet