Jak uzyskać sekwencję uruchamiania haków / akcji WordPress?

48

W jakiej kolejności add_actionwykonywać haki?

to znaczy

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




EDYTOWAĆ:

Opublikowałem również swoje rozwiązanie.

T.Todua
źródło
Możliwy duplikat wordpress.stackexchange.com/questions/135857/... jak kopalnia został opublikowany dnia 25 lutego '14
Babu
To, co widziałem w zasadach SE, wiek jedynego tematu nie ma już znaczenia dla decyzji o powieleniu: #
T.Todua

Odpowiedzi:

82

„Dane! Dane! Dane!” płakał niecierpliwie. „Nie mogę robić cegieł bez gliny”.

-The Adventure of the Copper Beeches

Zbierzmy więc prawdziwe dane z instalacji bez wtyczek, a motyw TwentyTwelve aktywowany tylko jednym widgetem tekstowym.

W przypadku strony głównej do_actionwykonywane są następujące połączenia w następującej kolejności:

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

Jeśli chcesz sprawdzić kolejność akcji i liczbę uruchomień każdego z nich, możesz użyć na przykład:

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

lub ta wstępnie zatwierdzona wersja:

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

});

aby uzyskać następującą listę:

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: Powinieneś także sprawdzić świetną wtyczkę Query Monitor autorstwa Johna Blackbourna. (Nie jestem powiązany z tą wtyczką)

birgire
źródło
Naprawdę bardzo ładnie!
jdm2112
Dziękujemy za wzmiankę o Monitorze zapytań. Wydaje się być przydatną wtyczką w tej sprawie.
DAH
@kraftner dzięki za aktualizację, zawsze planowałem (ale o tym zapomniałem) link bezpośrednio do samej historii jako właściwego źródła, oczywiście moja wyszukiwarka Sherlocka Holmesa nie była w tym czasie świetna ;-)
birgire
1
Podobał mi się cytat i chciałem zobaczyć więcej kontekstu. A ponieważ miałem już link do siebie, dlaczego nie po prostu tutaj zaktualizować. :)
kraftner
1
Ponad 4-letni post i nadal pomocny. Wielkie dzięki!
Sebastian Kaczmarek
20

Oto wykres obciążenia WordPress

Wykres obciążenia WordPress

Źródło @Rarst

Robert Hue
źródło
9
Dodaj przynajmniej źródło , a nawet lepiej: znajdź duplikat tego pytania.
fuxia
2
Właściwie nie wiedziałem, skąd go mam. Miałem ten obraz zapisany na moim komputerze. W przeciwnym razie zrobiłbym to.
Robert hue
Jest również opublikowany na stronie głównej Toma Mc Farlina: Cykl życia strony WordPress -> tommcfarlin.com/wordpress-page-lifecycle
DAH
3

Znalezione rozwiązanie!

Dzięki @birgire za miłą odpowiedź. Dodam do tego, że muplugins_loadedczasami nie jest uruchamiany, więc użyję plugins_loadedjako pierwszego haka (ale w tym czasie autoryzacja użytkownika jeszcze się nie zakończyła . Jeśli chcesz sprawdzić autoryzację użytkownika, initjest to najwcześniejsza). ..

ps istnieją doskonałe wtyczki:

1) Monitor zapytań - Możesz zobaczyć wszystko, co dzieje się podczas ładowania strony, tj. Czas trwania każdej wykonanej funkcji i wiele więcej (zobacz wszystkie zrzuty ekranu na stronie wtyczki):

wprowadź opis zdjęcia tutaj

2) WP-DEBUG-BAR + WP-DEBUG-SLOW-ACTIONS :
a) lista uruchomień debugowania ( akcji ) w witrynie.
b) Zobacz czas trwania każdej akcji (nie działa): wprowadź opis zdjęcia tutaj

T.Todua
źródło
1

Żadne dwa żądania nie są dokładnie takie same. Szybkim i brudnym (ale bardzo dokładnym) sposobem, aby dowiedzieć się, co się dzieje, jest tymczasowe dodanie wiersza na początku do_actionfunkcji, w wp-includes/plugin.phpktórej loguje się $tag, np .:

if (isset($some_get_or_post_trigger_var)) file_put_contents(ABSPATH . 'action.log', "$tag\n", FILE_APPEND);
Walf
źródło