¿Cómo obtener la secuencia de ejecución de ganchos / acciones de WordPress?

48

¿En qué orden se add_actionejecutan los ganchos?

es decir

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




EDITAR:

También publiqué mi solución.

T.Todua
fuente
Posible duplicado de wordpress.stackexchange.com/questions/135857/… ya que el mío fue publicado el 25 de febrero de 2014
Babu el
Lo que he visto en las reglas de SE, la edad del único tema ya no cuenta para la decisión de duplicación: #
T.Todua

Respuestas:

82

"¡Datos! ¡Datos! ¡Datos!" lloró impacientemente. "No puedo hacer ladrillos sin arcilla".

-La aventura de las hayas de cobre

Así que recopilemos algunos datos reales de una instalación sin complementos y el tema TwentyTwelve activado con un solo widget de texto.

Para la página de inicio, las siguientes do_actionllamadas se realizan en el siguiente orden:

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 desea verificar el orden de las acciones y cuántas veces se dispara cada una, puede usar, por ejemplo:

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

o esta versión prettificada:

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

});

para obtener la siguiente lista:

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) 

PD: También deberías consultar el excelente complemento de Query Monitor de John Blackbourn. (No estoy relacionado con este complemento)

Birgire
fuente
¡Muy bueno de verdad!
jdm2112
Gracias por mencionar Query Monitor. Parece ser un complemento útil en este caso.
DAH
@kraftner gracias por la actualización, siempre planeé (pero lo olvidé) vincular directamente a la historia en sí como una fuente adecuada, obviamente mi búsqueda de Sherlock Holmes no era genial en ese momento ;-)
birgire
1
Me gustó la cita y quería ver más contexto. Y como ya tenía el enlace para mí, ¿por qué no solo actualizar aquí también? :)
kraftner
1
Más de 4 años y aún útil. ¡Muchas gracias!
Sebastian Kaczmarek
20

Aquí está la tabla de carga de WordPress

Gráfico de carga de WordPress

Fuente de @Rarst

Robert hue
fuente
99
Agregue al menos la fuente , o incluso mejor: encuentre un duplicado para esta pregunta.
fuxia
2
En realidad no sabía de dónde lo obtuve. Tenía esta imagen guardada en mi PC. De lo contrario, habría hecho eso.
Robert hue
También se publica en la página de inicio de Tom Mc Farlin: El ciclo de vida de la página de WordPress -> tommcfarlin.com/wordpress-page-lifecycle
DAH
3

Solución encontrada!

Gracias @birgire por una buena respuesta. Agregaré a eso, a muplugins_loadedveces no se dispara, por lo que lo usaré plugins_loadedcomo el primer gancho (pero en ese momento, la autorización del usuario aún no se ha realizado. Si desea verificar la autorización del usuario, entonces inites la más temprana para eso). ..

ps existen excelentes complementos:

1) Monitor de consulta : puede ver todo lo que sucede en la carga de la página, es decir, la duración de cada función ejecutada y mucho más (ver todas las capturas de pantalla en la página del complemento):

ingrese la descripción de la imagen aquí

2) WP-DEBUG-BAR + WP-DEBUG-SLOW-ACTIONS :
a) lista de ejecuciones de depuración de ganchos ( acciones ) en su sitio.
b) Ver duración de cada acción (no función): ingrese la descripción de la imagen aquí

T.Todua
fuente
1

No hay dos solicitudes exactamente iguales. Una forma rápida y sucia (pero muy precisa) de averiguar qué está sucediendo es agregar temporalmente una línea al inicio de la do_actionfunción en la wp-includes/plugin.phpque se registran $tag, por ejemplo:

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