Wie bekomme ich die Ausführungsreihenfolge von WordPress-Hooks / -Aktionen?


48

In welcher Reihenfolge werden add_actionHooks ausgeführt?

dh

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




BEARBEITEN:

Ich habe auch meine Lösung gepostet.


Mögliches Duplikat von wordpress.stackexchange.com/questions/135857/…, wie meins am 25. Februar 14
Babu

Was ich in den SE-Regeln gesehen habe, zählt das Alter des einzigen Themas nicht mehr für die Duplizierungsentscheidung: #
T.Todua

Antworten:


82

"Daten! Daten! Daten!" er weinte ungeduldig. "Ohne Ton kann ich keine Ziegel machen."

-Das Abenteuer der Kupferbuchen

Sammeln wir also einige echte Daten aus einer Installation ohne Plugins und dem TwentyTwelve-Design, das mit nur einem einzigen Text-Widget aktiviert wurde.

Für die Homepage werden die folgenden do_actionAnrufe in der folgenden Reihenfolge getätigt:

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

Wenn Sie die Reihenfolge der Aktionen überprüfen möchten und wissen möchten, wie oft die einzelnen Aktionen ausgelöst wurden, können Sie beispielsweise Folgendes verwenden:

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

oder diese schöne Version:

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

});

um die folgende Liste zu erhalten:

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: Sie sollten sich auch das großartige Query Monitor- Plugin von John Blackbourn ansehen. (Ich bin nicht mit diesem Plugin verwandt.)


Tatsächlich sehr nett!
jdm2112,

Vielen Dank, dass Sie Query Monitor erwähnt haben. Scheint in diesem Fall ein nützliches Plugin zu sein.
DAH

@kraftner, danke für das Update, ich hatte immer vor (habe es aber vergessen), direkt auf die Geschichte selbst als richtige Quelle zu verlinken, offensichtlich war meine Sherlock Holmes-Suche zu dieser Zeit nicht großartig
;-)

1
Ich mochte das Zitat und wollte mehr Kontext sehen. Und da ich bereits den Link für mich hatte, warum nicht auch hier aktualisieren? :)
Kraftner

1
Über 4 Jahre post und immer noch hilfreich. Danke vielmals!
Sebastian Kaczmarek


3

Gefundene Lösung!

Danke @birgire für die nette Antwort. Ich füge hinzu, muplugins_loadedmanchmal wird nicht gefeuert, also verwende ich plugins_loadedals ersten Haken (aber zu diesem Zeitpunkt ist die Benutzerautorisierung noch nicht abgeschlossen. Wenn Sie die Benutzerautorisierung überprüfen möchten, initist dies der früheste Zeitpunkt dafür). ..

ps es gibt exzellente plugins:

1) Query Monitor - Sie können alles sehen, was beim Laden der Seite passiert, dh die Dauer jeder ausgeführten Funktion und vieles mehr (alle Screenshots auf der Pluginseite anzeigen):

Bildbeschreibung hier eingeben

2) WP-DEBUG-BAR + WP-DEBUG-SLOW-ACTIONS :
a) Debuggen von Hooks ( Aktionen ) auf Ihrer Site.
b) Siehe Dauer jeder Aktion (nicht Funktion): Bildbeschreibung hier eingeben


1

Keine zwei Anfragen sind genau gleich. Ein schneller und unsauberer (aber sehr genauer) Weg, um herauszufinden, was los ist, besteht darin, vorübergehend eine Zeile an den Anfang der do_actionFunktion anzufügen, in der wp-includes/plugin.phpdie folgenden Protokolle $taggespeichert werden:

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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.