Як отримати послідовність виконання гачків / дій WordPress?


48

У якому порядку add_actionвиконують гачки?

тобто

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




Редагувати:

Я також розмістив своє рішення.


Можливий дублікат 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 Джона Блекбурна. (Я не пов’язаний із цим плагіном)


Дуже приємно насправді!
jdm2112

Дякуємо, що згадали Монітор запитів. Здається, корисний плагін у цьому випадку.
DAH

@kraftner дякую за оновлення, я завжди планував (але забув про це) зв’язатися безпосередньо з самою історією як належним джерелом. Очевидно, мій пошук Шерлока Холмса тоді не був великий ;-)
birgire

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) Монітор запитів - Ви можете побачити все, що відбувається під час завантаження сторінки, тобто тривалість кожної виконаної функції та багато іншого (переглянути всі знімки екрана на сторінці плагіна):

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

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


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);

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.