it-swarm-id.com

Perbedaan Antara Filter dan Action Hooks?

Saya telah melihat API plugin sedikit lebih mendalam baru-baru ini dan saya bertanya-tanya apa perbedaan nyata antara tindakan dan filter hooks . Mereka berdua adalah peristiwa yang menerima data sebagai parameter dan mereka tampaknya dapat melakukan hal yang sama.

Jelas saya melihat bahwa tindakan dipanggil ketika tindakan berlangsung dan filter dipanggil saat data dimanipulasi, tetapi tampaknya itu hanya perbedaan penamaan semantik.

Selain semantik dan untuk apa mereka digunakan, perbedaan nyata apa yang ada di antara mereka?

49
Sruly

Hi @Sruly :

Anda sudah cukup banyak menjawab pertanyaan Anda sendiri, tetapi saya akan sedikit menguraikan.

Kait Aksi

Actions Hooks dimaksudkan untuk digunakan ketika WordPress inti atau beberapa plugin atau tema memberi Anda kesempatan untuk memasukkan kode Anda pada titik tertentu dan melakukan satu atau lebih hal berikut ini:

  1. Gunakan echo untuk menyuntikkan beberapa HTML atau konten lain ke dalam buffer respons,
  2. Ubah status variabel global untuk satu atau lebih variabel, dan/atau
  3. Ubah parameter diteruskan ke fungsi hook Anda (dengan asumsi hook dipanggil oleh do_action_ref_array() alih-alih do_action() karena yang terakhir tidak mendukung variabel yang lewat oleh-referensi .)

Kait Filter

Filter Hooks berperilaku sangat mirip dengan Action Hooks tetapi tujuan penggunaannya adalah untuk menerima nilai dan berpotensi mengembalikan versi nilai yang dimodifikasi. Hook filter juga bisa digunakan seperti Action Hook yaitu untuk mengubah variabel global atau menghasilkan beberapa HTML, dengan asumsi itulah yang perlu Anda lakukan ketika hook disebut. Satu hal yang sangat penting tentang Filter Hooks yang tidak perlu Anda khawatirkan dengan Action Hooks adalah bahwa orang yang menggunakan Filter Hook must return (versi modifikasi) parameter pertama itu berlalu. Kesalahan pemula yang baru adalah lupa mengembalikan nilai itu!

Menggunakan Parameter Tambahan untuk Memberikan Konteks di Hook Filter

Sebagai tambahan Saya merasa bahwa Hook Filter tertatih-tatih di versi WordPress sebelumnya karena mereka hanya akan menerima satu parameter; Yaitu mereka akan mendapatkan nilai untuk mengubah tetapi tidak ada parameter ke-2 atau ke-3 untuk memberikan konteks apa pun. Namun belakangan, dan secara positif, sepertinya tim inti WordPress dengan gembira (bagi saya) telah menambahkan parameter tambahan ke Filter Hooks sehingga Anda dapat menemukan lebih banyak konteks. Contoh yang baik adalah kait posts_where; Saya percaya beberapa versi di belakangnya hanya menerima satu parameter sebagai query saat ini "di mana" kelas SQL tetapi sekarang ia menerima klausa dan referensi ke instance instance dari kelas WP_Query saat ini yang memunculkan hook.

Jadi apa perbedaan nyata?

Pada kenyataannya Filter Hooks cukup banyak superset dari Action Hooks. Yang pertama dapat melakukan apa pun yang dapat dilakukan terakhir dan sedikit lebih meskipun pengembang tidak memiliki tanggung jawab untuk mengembalikan nilai dengan Action Hook yang dia lakukan dengan Hook Filter.

Memberikan Bimbingan dan Tujuan Telegraphing

Tapi itu mungkin bukan yang penting. Saya pikir yang penting adalah bahwa oleh pengembang memilih untuk menggunakan Action Hook vs Filter Hook atau sebaliknya mereka telegraphing niat mereka dan dengan demikian memberikan panduan ke pembuat tema atau plugin yang mungkin menggunakan kail. Intinya mereka mengatakan "Saya akan menelepon Anda, melakukan apa pun yang perlu Anda lakukan" ATAU "Saya akan memberikan Anda nilai ini untuk dimodifikasi tetapi pastikan Anda memberikannya kembali . "

Jadi pada akhirnya saya pikir pedoman yang disediakan oleh pilihan tipe kait adalah nilai nyata di balik perbedaan . IMO, pokoknya.

Semoga ini membantu!

56
MikeSchinkel

Jika Anda melihat sumber untuk fungsi inti add_action(), itu hanya pembungkus untuk fungsi add_filter() ...

Dan jika Anda melihat fungsi inti do_action(), ini sangat mirip dengan fungsi inti apply_filters(), dengan satu perbedaan utama: ia tidak mengembalikan nilai.

Jadi apa artinya ini? tindakan seperti filter, kecuali tindakan tidak mengembalikan nilai, jadi Anda tidak dapat mengubah data. Ini menunjukkan bahwa itu sederhana untuk membuat mekanisme aksi WordPress dengan hanya menyalin mekanisme filter, dan tidak mengembalikan nilai. Pada dasarnya, yang dapat Anda lakukan dengan suatu tindakan hanyalah menjalankan fungsi tanpa mengubah beberapa nilai.

11
trusktr

Dalam kata sederhana.

Actions adalah fungsi PHP yang menjalankan output.

Filter adalah fungsi PHP yang mengembalikan output.

Diperbarui: Kita dapat memperluas plugin apa pun yang menggunakan tindakan dan filter tanpa mengubah kode di sana. Dengan menambahkan filter dan tindakan di tema atau plugin kita sendiri.


Bagaimana cara menggunakan?

Tindakan:

Lihat contoh-contoh sederhana di bawah ini dalam file functions.php tema Anda.

  1. Contoh Satu: (Contoh PHP sederhana)
 tes fungsi () {
 gema "Output"; 
} 
 
 tes (); 

Program di atas mencetak output:

Keluaran

[CATATAN: Ini tes () cukup panggil fungsi. Dan jalankan fungsi callback 'test'.]


  1. Contoh Dua: (Penggunaan Tindakan Sederhana)
 function test1 () {
 echo "Output"; 
} 
 add_action ('test', 'test1'); 
 
 do_action ('test'); 

Program di atas mencetak output:

Keluaran

[CATATAN: Di sini do_action('test') berfungsi seperti fungsi memanggil. Dan jalankan fungsi callback 'test1'.]


  1. Contoh Tiga: (Penggunaan Tindakan lainnya)
 function test2 () {
 echo "Test 2"; 
} 
 add_action ('test', 'test2', 1); 
 
 function test1 () {
 echo "Test 1"; 
} 
 add_action ('test', 'test1', 2); 
 
 do_action ('test'); 

Program di atas mencetak output:

 Tes 2Test 1 

[CATATAN: Di sini do_action('test') berfungsi seperti fungsi memanggil. Dan menjalankan fungsi callback pada prioritas itu.

Fungsi panggilan balik 'test1' memiliki prioritas 2 Dan 'test2' memiliki prioritas 1.]

Jika prioritas berubah seperti 'test1' dengan prioritas 1 Dan 'test2' dengan prioritas 2 maka output akan menjadi:

 Tes 1Test 2 

  1. Contoh Empat: (dukungan pihak ketiga) Tambahkan kode di bawah ini dalam functions.php
 fungsi test1 () {
 do_action ('test_before'); 
 echo "Test 1"; 
 do_action ('test_after'); 
 } 
 add_action ('test', 'test1'); 
 
 do_action ('test'); 

Program di atas mencetak output:

 Tes 1 

Sekarang, Buat contoh plugin untuk memeriksa cara kerjanya untuk Pengembang pihak ke-3.

  1. Buat folder 'sederhana' di direktori /wp-content/plugins/.
  2. Buat file bernama 'simple.php' dan tambahkan kode di bawah ini.
/* 
 * Nama Plugin: Plugin Sederhana 
 */
 Fungsi test_callback_function () {
 Echo "From plugin"; 
 ]} 
 add_action ('test', 'test_callback_function'); 

Sekarang, Aktifkan Plugin sederhana dari dashboard admin WordPress kami.

Goto menu plugin dan aktifkan.

Setelah mengaktifkan plugin di atas program, cetak hasilnya:

 Uji 1 Dari plugin 

[CATATAN: Jika kami menambahkan prioritas untuk tindakan plugin kami dari 1 hingga 9, maka itu mencetak hasilnya seperti:

 Dari pluginTest 1 

Karena, WordPress mempertimbangkan 10 priority by default untuk semua tindakan yang ditambahkan.]

Filter

Lihat contoh di bawah ini:

Contoh PHP sederhana:

 $ data = array ('one', 'two'); 
 print_r ($ data); 

Program di atas mencetak output:

 Array ([0] => satu [1] => dua) 
  1. Contoh Satu: (Penggunaan Sederhana Filter)
 $ data = apply_filters ('my_filter_name', array ('one', 'two')); 
 print_r ($ data); 
 
 add_filter (' my_filter_name ', function ($ old_data) {
 mengembalikan array (' tiga ',' empat '); 
}); 

Program di atas mencetak output:

 Array ([0] => tiga [1] => empat) 

Di sini, Kami telah menambahkan filter my_filter_name dan mengubah output yang ada array( 'one', 'two' ) dengan array( 'three', 'four' ) tanpa mengubah file theme/plugin.


4
maheshwaghmare