Comment obtenir la séquence d'exécution des crochets / actions de WordPress?


48

Dans quel ordre les add_actioncrochets s'exécutent?

c'est à dire

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




MODIFIER:

J'ai aussi posté ma solution.


Duplication possible de wordpress.stackexchange.com/questions/135857/… car le mien a été posté le 25 févr. 14
Babu

Ce que j'ai vu dans les règles SE, l'âge du seul sujet ne compte plus pour la décision de duplication: #
T.Todua

Réponses:


82

"Données! Données! Données!" cria-t-il avec impatience. "Je ne peux pas faire de briques sans argile."

-L'aventure des hêtres de cuivre

Cueillons donc de vraies données d’une installation sans plug-ins et du thème TwentyTwelve activé avec un seul widget texte.

Pour la page d’accueil, les do_actionappels suivants sont effectués dans l’ordre suivant:

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

Si vous souhaitez vérifier l'ordre des actions et combien de fois chacune d'elles est déclenchée, vous pouvez utiliser par exemple:

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

ou cette version raffinée:

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

});

pour obtenir la liste suivante:

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: Vous devriez également consulter l'excellent plugin Query Monitor de John Blackbourn. (Je ne suis pas lié à ce plugin)


Très beau effectivement!
jdm2112

Merci d’avoir mentionné Query Monitor. Semble être un plugin utile sur ce cas.
DAH

@kraftner merci pour la mise à jour, j'avais toujours prévu (mais je l'ai oublié) de faire un lien direct avec l'histoire elle-même en tant que source appropriée, de toute évidence ma recherche foo Sherlock Holmes n'était pas géniale à cette époque ;-)
birgire

1
J'ai aimé la citation et je voulais voir plus de contexte. Et comme j'avais déjà le lien pour moi-même, pourquoi ne pas simplement mettre à jour ici aussi. :)
kraftner

1
Plus de 4 ans après et toujours utile. Merci beaucoup!
Sebastian Kaczmarek


3

Solution trouvée!

Merci @birgire pour la bonne réponse. J'ajouterai à cela, muplugins_loadedparfois n'est pas déclenché, donc je vais utiliser plugins_loadedcomme le premier premier crochet (mais à ce moment, l'autorisation de l'utilisateur n'est pas encore terminée. Si vous voulez vérifier l'autorisation de l'utilisateur, alors initc'est la plus ancienne pour cela). ..

ps il existe d'excellents plugins:

1) Moniteur de requêtes - Vous pouvez voir tout ce qui se passe sur le chargement de la page, c'est-à-dire la durée de chaque fonction exécutée et bien plus encore (voir toutes les captures d'écran sur la page du plugin):

entrez la description de l'image ici

2) WP-DEBUG-BAR + WP-DEBUG-SLOW-ACTIONS :
a) liste de points de débogage exécutés ( actions ) sur votre site.
b) Voir la durée de chaque action (pas sa fonction): entrez la description de l'image ici


1

Aucune deux demandes ne sont exactement les mêmes. Un moyen rapide et sale (mais très précis) de savoir ce qui se passe consiste à ajouter temporairement une ligne au début de la do_actionfonction dans wp-includes/plugin.phplaquelle se connecte le $tag, par exemple:

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.