Как получить последовательность запуска ловушек / действий WordPress?

48

В каком порядке add_actionвыполняются крючки?

т.е.

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




РЕДАКТИРОВАТЬ:

Я также опубликовал свое решение.

T.Todua
источник
Возможный дубликат wordpress.stackexchange.com/questions/135857/…, поскольку мой был опубликован 25 февраля '14
Бабу
То, что я видел в правилах 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 от Джона Блэкборна. (Я не связан с этим плагином)

birgire
источник
Очень мило на самом деле!
jdm2112
Спасибо за упоминание Query Monitor. Кажется, будет полезным плагином на этот случай.
DAH
@kraftner спасибо за обновление, я всегда планировал (но забыл об этом) напрямую ссылаться на саму историю как на правильный источник, очевидно, мой поисковый
запрос
1
Мне понравилась цитата, и я хотел увидеть больше контекста. И поскольку у меня уже была ссылка для себя, почему бы не просто обновить здесь. :)
kraftner
1
Более 4 лет пост и все еще полезно. Большое спасибо!
Себастьян Качмарек
20

Вот график загрузки WordPress

Диаграмма загрузки WordPress

Источник @Rarst

Роберт Хюэ
источник
9
Добавьте хотя бы источник , или даже лучше: найдите дубликат для этого вопроса.
Fuxia
2
На самом деле я не знал, откуда я это взял. Я сохранил это изображение на моем компьютере. В противном случае я бы сделал это.
Роберт Хюэ
Это также опубликовано на домашней странице Тома Мак Фарлина: Жизненный цикл страницы WordPress -> tommcfarlin.com/wordpress-page-lifecycle
DAH
3

Найденное решение!

Спасибо @birgire за хороший ответ. Я добавлю к этому, muplugins_loadedиногда это не срабатывает, поэтому я буду использовать plugins_loadedкак самый первый хук (но в то время авторизация пользователя еще не завершена. Если вы хотите проверить авторизацию пользователя, то initэто самое раннее для этого). ..

ps существуют отличные плагины:

1) Query Monitor - вы можете видеть все, что происходит на странице загрузки, то есть продолжительность каждой выполняемой функции и многое другое (просмотреть все скриншоты на странице плагина):

введите описание изображения здесь

2) WP-DEBUG-BAR + WP-DEBUG-SLOW-ACTIONS :
a) список выполнения отладочных хуков ( действий ) на вашем сайте.
б) См продолжительность каждого действия (не функции): введите описание изображения здесь

T.Todua
источник
1

Нет двух одинаковых запросов. Быстрый и грязный (но очень точный) способ выяснить, что происходит, состоит в том, чтобы временно добавить строку в начало do_actionфункции, в wp-includes/plugin.phpкоторой регистрируется $tag, например:

if (isset($some_get_or_post_trigger_var)) file_put_contents(ABSPATH . 'action.log', "$tag\n", FILE_APPEND);
WALF
источник