Gunakan kait init wp untuk memanggil kait lain?

11

Saya ingin tahu apakah itu praktik yang baik sesuai dengan tema WordPress atau pengembangan plugin.

add_action('init','all_my_hooks');

function all_my_hooks(){

// some initialization stuff here and then

add_action('admin_init',-----);
add_action('admin_menu',----);

// more like so

}

Terima kasih

atinder
sumber

Jawaban:

16

Secara umum: Ya, tunggu kait khusus untuk memulai kode Anda sendiri. Jangan pernah hanya membuang instance objek ke namespace global. Namun initjarang diperlukan.

Anda menghubungkannya selambat mungkin. Jika kode pertama Anda berjalan pada wp_headjangan gunakan hook sebelumnya. Anda bahkan dapat membuat kaskade :

add_action( 'wp_head', 'first_callback' );

function first_callback()
{
    // do something
    // then
    add_action( 'wp_footer', 'second_callback' );
}

Mengenai initkait: Gunakan wp_loadedsebagai gantinya. Itu berjalan setelah initdan sesudah ms_site_check()dipanggil. Dengan cara ini Anda menghindari menjalankan plugin Anda pada sub situs yang tidak valid di instalasi multi-situs. Yang lainnya sama.

fuxia
sumber
3
+1 untuk wp_loadeddan info MS.
kaiser
terima kasih banyak atas tanggapan Anda, masih diragukan, mana yang lebih baik memuat semua kait lain di dalam wp_loaded atau memuatnya secara terpisah? saya bertanya-tanya apakah saya menambahkan kait di wp_loaded mereka akan terhubung lebih awal daripada mendapatkan ketagihan setelah admin_init atau admin_menu?
atinder
kait kaskus tidak menjadi masalah?
atinder
Tidak, mengapa harus begitu? Panggil kait kedua hanya jika yang pertama berguna.
fuxia
3

Saya tidak melihat manfaat besar dari praktik ini, karena alasan ini:

Fungsi panggilan balik Anda tidak dipanggil saat mendaftar

Fungsi add_actiondan add_filterhanya menambahkan entri ke variabel global $wp_filteryang menampung semua filter dan tindakan. Lihat sumber . Itu tidak memanggil fungsi Anda. Kode Anda akan berjalan hanya ketika do_actiondan apply_filtersdipanggil (dengan nama kait yang sesuai), yang terjadi sangat terlambat di tempat kait itu seharusnya.

Anda mungkin mengatakan bahwa hal itu akan membuat variabel global $wp_filtermenjadi lebih besar => lebih banyak memori yang dibutuhkan. Tapi saya pikir membuat fungsi baru memiliki masalah yang sama.

Kode pengorganisasian

Menempatkan semuanya dalam satu fungsi memaksa Anda untuk mengingat semua kait di setiap file di tema / plugin Anda. Anda tidak akan melakukan hal seperti ini:

  • di header.php: tambahkan fungsi kait dan panggilan balik untuk hal-hal yang terjadi di header (seperti menu, skrip pendaftaran)
  • di content.php: tambahkan fungsi kait dan panggilan balik untuk memfilter konten
  • admin-menu.php: tambahkan fungsi hooks dan callback untuk menambahkan menu admin

(anggap file-file itu dimasukkan ke dalam tema / plugin Anda)

Alih-alih itu, Anda harus:

  • menempatkan fungsi hanya callback di header.php, content.php,admin-menu.php
  • dan letakkan semua kait dalam fungsi terpisah di file lain

=> Itu akan membuat Anda sulit untuk mengetahui apa yang terjadi ketika Anda melihat konten header.phpfile. Anda harus mencari tahu kapan panggilan balik ini dipecat.

Dan pikirkan situasi ketika Anda memiliki beberapa kelas di tema / plugin Anda. Apakah Anda menempatkan semua kait semua kelas di satu tempat? Atau apakah setiap kelas memiliki fungsi pembungkus yang menampung semua kait? Itu terlalu berlebihan!

Atas alasan ini, saya pikir itu gaya pribadi :). Saya melihat beberapa kerangka kerja seperti Hybrid melakukan apa yang Anda katakan. Kadang-kadang itu membuat saya sulit untuk digg dalam kerangka itu!

Anh Tran
sumber