Perbedaan antara do_action dan add_action

20

Pertanyaan ini mungkin salah, saya tidak yakin tentang itu. Karena saya tidak jelas tentang ini.

Saya tahu add_actionini digunakan untuk menghubungkan fungsi kita ke fungsi yang ditentukan. Misalnya add_action('wp_head'.'myfunc');sekarang kode apa yang pernah ada myfuncakan dieksekusi di wp_head(). Ini jelas, tetapi saya ragu do_actionapa fungsinya?

Saya pikir ini digunakan untuk membuat kait kita sendiri seperti kait yang sudah tersedia (wp_head, wp_footer, .. dll). Jika saya benar, adakah yang bisa menunjukkan kepada saya jawaban yang mudah dimengerti dengan contoh sederhana.

Saya telah mencoba perbedaan di internet tetapi semua menunjuk pada perbedaan antara add_action dan add_filter. Saya tidak ingin pergi ke sana karena pertama saya ingin mengklarifikasi ini dan kemudian saya akan pindah ke sana.

Adakah yang bisa membantu saya?

Sunting setelah POST Pertanyaan

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

Saya mencoba ini di plugin tetapi saya tidak mendapatkan pesan peringatan.

Tetapi ketika saya menghubungkan fungsi yang sama dengan wp_headitu berfungsi dengan baik

/******************working****************/
add_action('wp_head','custom_register');
matahari
sumber
Apa yang terjadi ketika Anda menelepon do_action('custom'); setelah mendaftarkan panggilan balik? Dan pastikan jQuery dimuat.
fuxia
saya tidak mendapatkan pesan peringatan baik di bagian belakang atau ujung depan
sun
jQuery dimuat. Ketika saya menghubungkan fungsi yang sama dengan wp_headitu berfungsi dengan baik tetapi tidak dengancustom
sun
Sun, saya yakin Pertanyaan awal Anda dijawab oleh toscho dan Anda harus menandainya sebagai terselesaikan. Hasil edit # 3 dan # 4 yang Anda lakukan termasuk pada Pertanyaan baru .
brasofilo

Jawaban:

13

Gunakan do_action( 'unique_name' )untuk membuat tindakan Anda sendiri.

Anda dapat menggunakannya untuk menawarkan API untuk plugin Anda , sehingga plugin lain dapat mendaftarkan panggilan balik untuk tindakan kustom Anda. Contoh: Apakah saya perlu memanggil do_action di plugin saya?

Tetapi Anda juga dapat menggunakan tindakan khusus (atau filter) dalam suatu tema. Contoh: Cara praktik terbaik untuk mengimplementasikan bagian khusus ke dalam tema WordPress

Dan Anda dapat menggabungkan keduanya untuk membuat plugin dan tema bekerja bersama. Contoh: Bagaimana membuat metode dari plugin tersedia dalam tema?

Ringkasan: add_action( 'foo' )mendaftarkan panggilan balik, do_action( 'foo' )mengeksekusi panggilan balik yang terdaftar itu.

fuxia
sumber
Terima kasih atas bantuan yang saya dapat, ini terutama untuk keperluan API. Saya mencoba sampel tetapi tidak berhasil. Bisakah Anda menemukan masalah di sana? Periksa EDIT @toscho
sun
Bisakah kita mengatakan ini sebagai kasus lain seperti warisan? sebelum memperluas dan mengesampingkan kelas kita akan seperti ini. Apakah ini benar?
matahari
@un Hm, ya, tetapi Anda dapat menggabungkan kedua pendekatan , mereka tidak saling eksklusif.
fuxia
1

Ini adalah tebakan saya, jadi jika Anda lebih tahu, beri komentar agar saya dapat memperbarui tebakan saya.

Kode plugin Anda dieksekusi sebelumnya wp_head()(yang dapat kami asumsikan akan meminta tindakan yang ditambahkan ke dalamnya). Ketika Anda add_action('wp_head','custom_register'), Anda memberi tahu PHP bahwa kapan (di masa depan) do_action('wp_head')dipanggil, untuk menelepon custom_register()juga. Hal yang sama berlaku untuk panggilan Anda, add_action('custom','custom_register')tetapi seperti yang Anda lihat dalam kode Anda, panggilan ke do_action('custom')telah dilakukan, dan ketika dipanggil, tidak ada (belum) tindakan ditambahkan ke dalamnya. Inilah sebabnya mengapa Toscho bertanya apa yang terjadi ketika Anda menelepon do_action('custom') setelah Anda mendaftarkan panggilan balik. Jawaban Anda tentang ujung belakang dan ujung depan bersifat ambigu. Jika Anda menukar dua baris terakhir dalam kode berikut, saya pikir itu akan berhasil:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.
Dave Scotese
sumber
0

do_action: Mendaftarkan kait tindakan sementara add_action: menambahkan fungsi panggilan balik ke kait terdaftar.

Contoh

Pertimbangkan Anda ingin mencetak sesuatu sebelum bilah sisi di templat Anda.

  1. Anda akan menambahkan hook tindakan dalam file template Anda index.phpvia <?php add_action('bp_sidebar_left'); ?>.
  2. Sekarang di functions.phpfile Anda, Anda dapat menambahkan fungsi callback ke hook itu untuk mencetak sesuatu yang Anda inginkan.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }

Aamer Shahzad
sumber
-1

Anda harus menggunakan seperti di bawah ini:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect
pengguna112289
sumber
Ini berfungsi untuk saya
user112289