Berapa kali saya bisa melakukan tindakan yang sama?

8

Saya memiliki tema yang mencakup beberapa pengaturan, menggunakan after_setup_themetetapi saya ingin menulis fungsi saya sendiri yang juga perlu dijalankan after_setup_theme. Saya lebih suka menyimpan barang-barang saya di file terpisah. Bisakah saya menelepon after_setup_themebeberapa kali?

gillespieza
sumber

Jawaban:

27

Kait WordPress berfungsi seperti Hollywood: Anda tidak memanggilnya, mereka memanggil Anda. Tapi tidak seperti Hollywood, mereka terus memanggil semua orang di daftar.

Adalah normal untuk suatu tindakan atau filter untuk memiliki beberapa fungsi yang terhubung dengannya, dari plugin yang berbeda, atau bahkan hanya fungsi yang berbeda di inti WordPress yang semuanya melakukan sesuatu yang spesifik . Ini tidak hanya mungkin, tetapi bahkan praktik yang baik, karena ini berarti kode Anda menjadi lebih jelas (setiap fungsi hanya melakukan satu hal) dan lebih mudah untuk menonaktifkan satu fungsi tertentu dengan melepasnya.

Ingatlah bahwa Anda juga dapat bermain dengan prioritas kait: jika Anda ingin menjalankan keduanya functionA()dan functionB()di after_setup_theme, tetapi functionA()harus dijalankan sebelumnya functionB(), Anda dapat mengaitkan functionA()dengan prioritas default 10dan functionB()dengan prioritas 20(atau nomor lain di atas 10). Apa yang tidak berfungsi adalah mengaitkan fungsi lain ke suatu tindakan saat tindakan itu dijalankan . Jadi Anda tidak dapat menghubungkan functionB()ke after_setup_themedari functionA(), meminta after_setup_theme. Anda bisa menyebutnya langsung, tetapi Anda akan kehilangan manfaat dari kait yang terpisah.

Jan Fabry
sumber
7

Saran saya adalah memiliki fungsi "master", jika Anda mau, yang memanggil semua fungsi Anda yang lain. Dengan begitu Anda hanya perlu melakukan aksi itu satu kali.

add_action( 'after_setup_theme', 'master_function' );
function master_function()
{
    func_a();
    func_b();
    func_c();
    func_d();
    func_e();
}
function func_a(){ /* Do something */}
function func_b(){ /* Do something */}
function func_c(){ /* Do something */}
function func_d(){ /* Do something */}
function func_e(){ /* Do something */}

Ini memiliki manfaat tambahan karena dapat mengembalikan nilai yang dapat Anda gunakan dalam panggilan fungsi berikutnya.

Aaron Wagner
sumber
4

Ya, Anda dapat menambahkan sebanyak mungkin tindakan ke hook sesuai keinginan. Cobalah.

fuxia
sumber