ใช้ wp init hook เพื่อโทรหา hooks อื่นหรือไม่


11

ฉันต้องการที่จะรู้ว่ามันเป็นแนวปฏิบัติที่ดีตามธีม WordPress หรือการพัฒนาปลั๊กอิน

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

}

ขอบคุณ

คำตอบ:


16

โดยทั่วไป: ใช่รอเบ็ดเฉพาะเพื่อเริ่มรหัสของคุณเอง อย่าเพิ่งโยนอินสแตนซ์ของวัตถุลงใน namespace ส่วนกลาง แต่initไม่ค่อยจำเป็น

คุณขอสายเป็นไปได้ หากรหัสแรกของคุณทำงานwp_headไม่ได้ใช้เบ็ดก่อนหน้านี้ คุณสามารถเรียงซ้อนตะขอได้ :

add_action( 'wp_head', 'first_callback' );

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

เกี่ยวกับinitตะขอ: ใช้wp_loadedแทน ที่ทำงานหลังจากinitและหลัง ms_site_check()ถูกเรียก วิธีนี้คุณหลีกเลี่ยงการเรียกใช้ปลั๊กอินในไซต์ย่อยที่ไม่ถูกต้องในการติดตั้งแบบหลายไซต์ ทุกอย่างอื่นเหมือนกัน


3
+1 สำหรับwp_loadedและข้อมูล MS
ไกเซอร์

ขอบคุณมากสำหรับการตอบสนองของคุณยังคงสงสัยซึ่งจะดีกว่าโหลดตะขออื่น ๆ ทั้งหมดใน wp_loaded หรือโหลดแยกต่างหาก? ฉันสงสัยว่าถ้าฉันเพิ่ม hooks ใน wp_loaded พวกเขาจะถูก hook ก่อนหน้านี้แทนที่จะได้รับการติดหลังจาก admin_init หรือ admin_menu?
atinder

การเรียงซ้อน hooks ไม่เป็นปัญหาหรือไม่?
atinder

ไม่ทำไมต้องเป็นเช่นนั้น? เรียกเบ็ดที่สองก็ต่อเมื่อครั้งแรกมีประโยชน์
fuxia

3

ฉันไม่เห็นประโยชน์ที่ยิ่งใหญ่ของการฝึกนี้ด้วยเหตุผลเหล่านี้:

ฟังก์ชั่นการโทรกลับของคุณจะไม่ถูกเรียกเมื่อลงทะเบียน

add_actionและadd_filterฟังก์ชั่นเพียงเพิ่มรายการให้กับตัวแปรทั่วโลก$wp_filterซึ่งถือตัวกรองและการดำเนินการทั้งหมด แหล่งที่มาดู มันไม่ได้เรียกฟังก์ชั่นของคุณ รหัสของคุณจะทำงานเฉพาะเมื่อdo_actionและapply_filtersถูกเรียก (ด้วยชื่อ hook ที่เหมาะสม) ซึ่งเกิดขึ้นช้ามากในสถานที่ที่ hooks เหล่านั้นควรจะเป็น

คุณอาจบอกว่าการทำเช่นนั้นจะทำให้ตัวแปรทั่วโลก$wp_filterเริ่มมีขนาดใหญ่ขึ้น => ต้องการหน่วยความจำเพิ่มเติม แต่ฉันคิดว่าการสร้างฟังก์ชั่นใหม่มีปัญหาเดียวกัน

รหัสการจัดระเบียบ

การวางทุกอย่างไว้ในฟังก์ชั่นเดียวบังคับให้คุณจำ hooks ทั้งหมดในทุกไฟล์ในธีม / ปลั๊กอินของคุณ คุณจะไม่ทำสิ่งนี้:

  • ในheader.php: เพิ่มฟังก์ชั่น hooks และ callback สำหรับสิ่งที่เกิดขึ้นในส่วนหัว (เช่นเมนู, สคริปต์การลงทะเบียน)
  • in content.php: เพิ่มฟังก์ชั่น hooks และ callback สำหรับการกรองเนื้อหา
  • admin-menu.php: เพิ่มฟังก์ชั่น hooks และ callback เพื่อเพิ่มเมนู admin

(สมมติว่าไฟล์เหล่านั้นอยู่ในธีม / ปลั๊กอินของคุณ)

แทนที่จะเป็นเช่นนั้นคุณต้อง:

  • ใส่ฟังก์ชั่นโทรกลับเฉพาะในheader.php, content.php,admin-menu.php
  • และวาง hooks ทั้งหมดในฟังก์ชั่นที่แยกจากกันในไฟล์อื่น

=> นั่นจะทำให้คุณยากที่จะรู้ว่าจะเกิดอะไรขึ้นเมื่อคุณดูเนื้อหาของheader.phpไฟล์ คุณต้องค้นหาเพื่อทราบว่าเมื่อใดที่มีการโทรกลับ

และคิดเกี่ยวกับสถานการณ์เมื่อคุณมีหลายคลาสในชุดรูปแบบ / ปลั๊กอินของคุณ คุณใส่ตะขอทั้งหมดของชั้นเรียนทั้งหมดไว้ในที่เดียวหรือไม่? หรือแต่ละชั้นมีฟังก์ชั่นเสื้อคลุมที่มีตะขอทั้งหมดหรือไม่ ซ้ำซ้อนเกินไป!

เหนือเหตุผลเหล่านี้ฉันคิดว่ามันเป็นสไตล์ส่วนตัว :) ฉันเห็นกรอบบางอย่างเช่น Hybrid ทำในสิ่งที่คุณพูด บางครั้งมันทำให้ฉันยากที่จะขุดในกรอบเหล่านั้น!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.