问题描述
add_action
钩子执行什么顺序/顺序?
即
init
wp_head
wp_footer
after_theme_setup
etc..
编辑:找到解决方案!
感谢 @birgire 的好回答。我会补充一点,muplugins_loaded
有时不会被触发,所以我将使用 plugins_loaded
作为最先的钩子 (但是那时 user-authorization 还没有完成,如果你想检查用户的授权,那么 init
是最早的) …
附:存在优秀的插件:
1) 查询监视器 – 您可以看到 page-load 上发生的一切,即每个执行的功能的持续时间等等 (查看插件页面上的所有屏幕截图):
2)WP-DEBUG-BAR + WP-DEBUG-SLOW-ACTIONS:a) 您的站点上的调试挂钩 (操作) 运行列表。 b) 查看每个动作的持续时间 (不是功能):
最佳解决方案
“Data! Data! Data!” he cried impatiently. “I can’t make bricks without clay.”
所以让我们从没有插件的安装中收集一些真实的数据,而 TwentyTwelve 主题只用一个 Text 小工具来激活。
对于主页,以下 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:你还应该看看 John Blackbourn 的伟大的 Query Monitor 插件。 (我没有关系到这个插件)
次佳解决方案
这是 WordPress 的负载图表
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。