ระหว่าง functions.php, วิดเจ็ตและปลั๊กอิน, ซึ่งโหลดก่อน?


78

ลูกค้าถามว่าปลั๊กอินแบบหมุนที่เขาใช้นั้นสามารถทำการวิดเจ็ตได้หรือไม่ นั่นหมายความว่าฉันควรสร้างวิดเจ็ตภายใน functions.php ซึ่งเรียกใช้ฟังก์ชันของปลั๊กอิน นั่นหมายความว่าจะต้องโหลดรหัสของปลั๊กอินก่อนเพื่อให้สามารถใช้งานฟังก์ชั่น WordPress ได้เมื่อโหลดไฟล์ functions.php ใช่ไหม มันจะใช้ได้ไหม

คำตอบ:


185

ปลั๊กอินโหลดก่อนธีม (ใช่ฉันกำลังมองหาข้ออ้างที่จะใช้สิ่งนี้):

ป้อนคำอธิบายรูปภาพที่นี่

อย่างไรก็ตามมันเป็นความผิดที่คิดว่าเป็นจุดของการเรียกใช้โค้ด สำหรับกรณีส่วนใหญ่ทุกอย่างควรได้รับการติดตั้งและดำเนินการไม่เร็วไปกว่าinitเบ็ด ตามที่ลงทะเบียนเครื่องมือ Codex มีควรได้รับการติดยาเสพติดregister_widget()widget_init

เนื่องจากลำดับของการโหลดนั้นไม่สำคัญสำหรับกรณีนี้คุณจะมีทุกสิ่งที่โหลดโดยวิดเจ็ตเวลาที่ต้องการในทุกกรณี


3
โหลด WP หลักจะไม่ทำให้รู้สึกใด ๆ
กาการีน

7
มีโอกาสใดที่เราจะได้รับแผนภูมิที่ปรับปรุงใหม่ในปี 2559? ;-)
jgraup

9
@jgraup คุณบอกว่าชอบสิ่งที่มีการเปลี่ยนแปลงใน WordPress หลัก ... :)
Rarst

1
@Rarst, touché ;-)
jgraup

2
@IsaacLubow ใช่สิ่งต่าง ๆ ในคอลัมน์มากกว่าหนึ่งคอลัมน์สำหรับบริบทดังกล่าวเนื่องจากคุณสามารถเห็นการโหลดคอร์หลักที่เหมือนกันมักเกี่ยวข้องกับคำขอใด ๆ
Rarst

16

วิธีการหนึ่งที่น่าสนใจคือการแสดง hooks ทั้งหมดไปยังไฟล์ในลำดับของการประมวลผล

add_action( 'all', '_20161224_printer' );
function _20161224_printer( $r ){

    $line =  microtime(true)*10000 . ' ' . $r .  "\n";
    $fp = fopen( ABSPATH . 'hooks.txt', 'a+');
    fwrite($fp, $line);
    fclose($fp);

}

และคุณจะได้ผลลัพธ์เช่นนี้

14825992300742 pre_option_blog_charset
14825992300743 option_blog_charset
14825992300743 plugins_loaded
14825992300744 load_default_widgets
14825992300745 load_default_embeds
14825992300745 wp_audio_extensions
14825992300745 wp_audio_embed_handler
14825992300746 wp_video_extensions
14825992300746 wp_video_embed_handler
14825992300746 sanitize_comment_cookies
14825992300747 pre_option_permalink_structure
14825992300747 option_permalink_structure
14825992300748 pre_option_wp_user_roles
14825992300748 option_wp_user_roles
14825992300749 wp_roles_init
14825992300749 setup_theme
14825992300749 pre_option_template
14825992300750 option_template
14825992300750 template
14825992300750 theme_root
14825992300751 template_directory
14825992300751 pre_option_stylesheet
14825992300751 option_stylesheet
14825992300751 stylesheet
14825992300752 theme_root
14825992300752 stylesheet_directory
14825992300752 pre_option_WPLANG
14825992300753 query
14825992300754 default_option_WPLANG
14825992300755 locale
14825992300755 override_unload_textdomain
14825992300755 unload_textdomain
14825992300755 override_load_textdomain
14825992300756 load_textdomain
14825992300756 load_textdomain_mofile
14825992300756 locale
...
many many more action hooks
...
14825992302886 wp_parse_str
14825992302886 nonce_life
14825992302886 salt
14825992302886 wp_parse_str
14825992302887 esc_html
14825992302887 logout_url
14825992302887 clean_url
14825992302887 gettext
14825992302887 wp_after_admin_bar_render
14825992302888 pre_option_template
14825992302888 option_template
14825992302888 template
14825992302888 theme_root
14825992302888 template_directory
14825992302889 parent_theme_file_path
14825992302889 shutdown

โปรดทราบว่ารายการทั้งหมดไม่สามารถจำกัดความยาวได้ไม่เกิน 30,000 อักขระต่อโพสต์ WPSO ดังนั้นฉันจึงลบการกระทำของ hooks ออก

วางโค้ดด้านบนไว้ในปลั๊กอิน ถ้าคุณทำอย่างนั้นจากรูปแบบที่คุณจะไม่จับfunctions.php plugins_loadedอีกหนึ่งข้อพิสูจน์ปลั๊กอินถูกโหลดก่อนธีม

สารพัดที่เป็นไปได้ของการตรวจสอบนี้มีมากมาย แต่โปรดทราบว่าผลลัพธ์จะแตกต่างกันไปสำหรับเทมเพลตหน้าต่างๆที่คุณจะโทรหรือถ้าคุณอยู่ในแผงควบคุม

ฉันเรียกมันว่าจาก/?p=1หรือหน้า Hello World

หากคุณไม่ได้เปิดใช้งานปลั๊กอินเดียวคุณสามารถใส่รหัสนี้ลงในmu-pluginsโฟลเดอร์

อาจเป็นการดีกว่าที่จะใช้WP FS APIแต่วิธีนี้เป็นข้อสรุปที่แท้จริง


ภายในปลั๊กอิน wp-admin ถูกโหลดหลังจากชุดรูปแบบหรือตามลำดับการติดตั้ง ... และในส่วนหน้าปลั๊กอินจะโหลดก่อนชุดรูปแบบ ...
Vishal Kumar Sahu

3

คุณสามารถมีวิดเจ็ตภายในไฟล์. php ของปลั๊กอิน (และมีตัวแปรส่วนกลางที่แชร์ซึ่งทั้งคู่สามารถใช้งานได้) หากนั่นคือสิ่งที่คุณต้องการ นี่คือการสอนที่มีโค้ดตัวอย่างที่ฉันสะดุดในขณะที่กลับ

นอกจากนี้ต่อไปนี้เป็นรายการการกระทำที่เรียกใช้ในระหว่างคำขอทั่วไปตามลำดับของการดำเนินการ # 2 และ # 10 แนะนำให้โหลดปลั๊กอินก่อน ไม่แน่ใจเกี่ยวกับ function.php


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