วิธีการขอ hooks / actions ของ WordPress ทำงานตามลำดับ


48

คำสั่งadd_actionhooks จะดำเนินการอย่างไร

กล่าวคือ

init
wp_head
wp_footer
after_theme_setup 
etc...
???
???
???




แก้ไข:

ฉันโพสต์โซลูชันของฉันด้วย


เป็นไปได้ที่ซ้ำกันของwordpress.stackexchange.com/questions/135857/…ขณะที่เหมืองถูกโพสต์เมื่อ 25 ก.พ. 14
Babu

สิ่งที่ฉันได้เห็นในกฎ SE อายุของหัวข้อเท่านั้นไม่นับการตัดสินใจซ้ำซ้อนอีกต่อไป: #
T.Todua

คำตอบ:


82

"ข้อมูล! ข้อมูล! ข้อมูล!" เขาร้องไห้อย่างหงุดหงิด "ฉันทำอิฐด้วยดินไม่ได้"

- การผจญภัยของทองแดงบีช

ดังนั้นให้รวบรวมข้อมูลจริงจากการติดตั้งโดยไม่มีปลั๊กอินและธีม TwentyTwelve เปิดใช้งานด้วยวิดเจ็ตข้อความเดียว

สำหรับโฮมเพจการdo_actionโทรต่อไปนี้ทำตามลำดับต่อไปนี้:

muplugins_loaded
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_post_type
registered_post_type
registered_post_type
registered_post_type
registered_post_type
plugins_loaded
sanitize_comment_cookies
setup_theme
unload_textdomain
load_textdomain
after_setup_theme
load_textdomain
load_textdomain
auth_cookie_malformed
auth_cookie_valid
set_current_user
init
registered_post_type
registered_post_type
registered_post_type
registered_post_type
registered_post_type
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
registered_taxonomy
widgets_init
register_sidebar
register_sidebar
register_sidebar
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_register_sidebar_widget
wp_loaded
parse_tax_query
parse_tax_query
posts_selection
template_redirect
admin_bar_init
add_admin_bar_menus
get_header
wp_head
wp_enqueue_scripts
wp_print_styles
wp_print_scripts
get_template_part_content
begin_fetch_post_thumbnail_html
end_fetch_post_thumbnail_html
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
get_template_part_content
begin_fetch_post_thumbnail_html
end_fetch_post_thumbnail_html
get_sidebar
dynamic_sidebar_before
dynamic_sidebar
dynamic_sidebar_after
get_footer
twentytwelve_credits
wp_footer
wp_print_footer_scripts
wp_before_admin_bar_render
wp_after_admin_bar_render
shutdown

หากคุณต้องการตรวจสอบลำดับของการกระทำและจำนวนครั้งที่แต่ละรายการถูกไล่ออกคุณสามารถใช้ตัวอย่างเช่น:

add_action( 'shutdown', function(){
    print_r( $GLOBALS['wp_actions'] ); 
});

หรือรุ่นที่สวยงามนี้:

add_action( 'shutdown', function(){
    foreach( $GLOBALS['wp_actions'] as $action => $count )
        printf( '%s (%d) <br/>' . PHP_EOL, $action, $count );

});

เพื่อรับรายการต่อไปนี้:

muplugins_loaded (1) 
registered_taxonomy (10) 
registered_post_type (10) 
plugins_loaded (1) 
sanitize_comment_cookies (1) 
setup_theme (1) 
unload_textdomain (1) 
load_textdomain (3) 
after_setup_theme (1) 
auth_cookie_malformed (1) 
auth_cookie_valid (1) 
set_current_user (1) 
init (1) 
widgets_init (1) 
register_sidebar (3) 
wp_register_sidebar_widget (12) 
wp_loaded (1) 
parse_request (1) 
send_headers (1) 
parse_tax_query (2) 
parse_query (1) 
pre_get_posts (1) 
posts_selection (1) 
wp (1) 
template_redirect (1) 
wp_default_scripts (1) 
wp_default_styles (1) 
admin_bar_init (1) 
add_admin_bar_menus (1) 
get_header (1) 
wp_head (1) 
wp_enqueue_scripts (1) 
wp_print_styles (1) 
wp_print_scripts (1) 
loop_start (1) 
the_post (10) 
get_template_part_content (10) 
begin_fetch_post_thumbnail_html (2) 
end_fetch_post_thumbnail_html (2) 
loop_end (1) 
get_sidebar (1) 
dynamic_sidebar_before (1) 
dynamic_sidebar (1) 
dynamic_sidebar_after (1) 
get_footer (1) 
twentytwelve_credits (1) 
wp_footer (1) 
wp_print_footer_scripts (1) 
admin_bar_menu (1) 
wp_before_admin_bar_render (1) 
wp_after_admin_bar_render (1) 
shutdown (1) 

PS: คุณควรตรวจสอบปลั๊กอินQuery Monitorที่ยอดเยี่ยมโดย John Blackbourn (ฉันไม่เกี่ยวข้องกับปลั๊กอินนี้)


ดีมากจริง ๆ !
jdm2112

ขอบคุณที่กล่าวถึง Query Monitor ดูเหมือนว่าจะเป็นปลั๊กอินที่มีประโยชน์ในกรณีนี้
DAH

@kraftner ขอบคุณสำหรับการอัปเดตฉันวางแผนอยู่เสมอ (แต่ลืมเรื่องนี้) เพื่อเชื่อมโยงโดยตรงกับเรื่องราวของตัวเองในฐานะแหล่งข้อมูลที่เหมาะสมเห็นได้ชัดว่า Sherlock Holmes foo ของฉันค้นหาไม่ดีในเวลานั้น ;-)
birgire

1
ฉันชอบคำพูดและต้องการดูบริบทเพิ่มเติม และเนื่องจากฉันมีลิงค์สำหรับตัวเองแล้วทำไมไม่อัพเดทที่นี่ด้วย :)
kraftner

1
โพสต์มากกว่า 4 โย่และยังคงเป็นประโยชน์ ขอบคุณมาก!
Sebastian Kaczmarek

20

นี่คือแผนภูมิโหลด WordPress

แผนภูมิโหลด WordPress

แหล่งที่มาโดย @Rarst


9
เพิ่มอย่างน้อยแหล่งที่มาหรือดียิ่งขึ้น: ค้นหาซ้ำสำหรับคำถามนี้
fuxia

2
จริงๆแล้วฉันไม่รู้ว่าฉันได้รับจากที่ใด ฉันมีภาพนี้บันทึกไว้ในพีซีของฉัน มิฉะนั้นฉันจะทำอย่างนั้น
Robert hue

มันถูกตีพิมพ์ในหน้าแรกของ Tom Mc Farlin: The WordPress Page Lifecycle -> tommcfarlin.com/wordpress-page-lifecycle
DAH

3

ค้นพบทางออก!

ขอบคุณ@ Birgireสำหรับคำตอบที่ดี ฉันจะเพิ่มการที่muplugins_loadedบางครั้งไม่ได้ยิงดังนั้นฉันจะใช้plugins_loadedเป็นตะขอแรกมากที่สุด ( แต่ในเวลานั้นผู้ใช้สิทธิ์ยังไม่ได้ทำ. ถ้าคุณต้องการที่จะตรวจสอบการอนุมัติของผู้ใช้แล้วinitเป็นเร็วสำหรับที่) ..

ps มีปลั๊กอินที่ยอดเยี่ยมอยู่:

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

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

2) WP-DEBUG-BAR + WP-DEBUG-SLOW-ACTIONS :
a) debug hooks ( actions ) เรียกใช้รายการบนไซต์ของคุณ
b) ดูระยะเวลาของแต่ละการกระทำ (ไม่ใช่ฟังก์ชั่น): ป้อนคำอธิบายรูปภาพที่นี่


1

ไม่มีสองคำขอที่เหมือนกัน วิธีที่รวดเร็วและสกปรก (แต่แม่นยำมาก) ในการค้นหาว่าเกิดอะไรขึ้นคือการเพิ่มบรรทัดไปยังจุดเริ่มต้นของฟังก์ชันที่บันทึกไว้เป็นการชั่วคราวเช่น:do_actionwp-includes/plugin.php$tag

if (isset($some_get_or_post_trigger_var)) file_put_contents(ABSPATH . 'action.log', "$tag\n", FILE_APPEND);

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