Como obter os ganchos / ações do WordPress executados em sequência?

48

Em que ordem os add_actionganchos são executados?

ie

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




EDITAR:

Também publiquei minha solução.

T.Todua
fonte
Possível duplicata do wordpress.stackexchange.com/questions/135857/… como a minha foi publicada em 25/02/14
Babu
O que eu vi nas regras da SE, a idade do único tópico não conta mais para a decisão de duplicação: #
T.Todua

Respostas:

82

"Dados! Dados! Dados!" ele chorou impaciente. "Eu não posso fazer tijolos sem argila."

-A aventura das faias de cobre

Então, vamos reunir alguns dados reais de uma instalação sem plug-ins e o tema TwentyTwelve ativado com apenas um único widget de texto.

Para a página inicial, as seguintes do_actionchamadas são feitas na seguinte ordem:

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

Se você quiser verificar a ordem das ações e quantas vezes cada uma delas foi acionada, poderá usar, por exemplo:

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

ou esta versão prettified:

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

});

para obter a seguinte 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) 

PS: Você também deve conferir o ótimo plugin Query Monitor de John Blackbourn. (Eu não estou relacionado a este plugin)

Birgire
fonte
Muito bom mesmo!
Jdm2112
Obrigado por mencionar o Query Monitor. Parece ser um plugin útil neste caso.
DAH
@kraftner obrigado pela atualização, eu sempre planejei (mas esqueci) de vincular diretamente a história como uma fonte adequada, obviamente, minha busca por Sherlock Holmes não era ótima na época ;-)
birgire
1
Gostei da citação e queria ver mais contexto. E como eu já tinha o link para mim, por que não apenas atualizar aqui também. :)
kraftner
1
Mais de 4 anos postar e ainda útil. Muito obrigado!
Sebastian Kaczmarek
20

Aqui está o gráfico de carregamento do WordPress

Gráfico de carga do WordPress

Fonte por @Rarst

Robert hue
fonte
9
Adicione pelo menos a fonte , ou melhor ainda: encontre uma duplicata para esta pergunta.
fuxia
2
Na verdade, eu não sabia de onde consegui. Eu tinha essa imagem salva no meu PC. Caso contrário, eu teria feito isso.
Robert hue
É também publicada no Tom Mc Farlin homepage: O WordPress Página Lifecycle -> tommcfarlin.com/wordpress-page-lifecycle
DAH
3

Solução encontrada!

Obrigado @birgire pela boa resposta. Acrescentarei a isso, muplugins_loadedàs vezes não é acionado, então usarei plugins_loadedcomo o primeiro gancho (mas, naquele momento, a autorização do usuário ainda não foi concluída. Se você deseja verificar a autorização do usuário, inité o mais antigo). ..

ps existem excelentes plugins:

1) Monitor de consulta - Você pode ver tudo o que acontece no carregamento da página, ou seja, a duração de cada função executada e muito mais (veja todas as capturas de tela na página do plugin):

insira a descrição da imagem aqui

2) WP-DEBUG-BAR + WP-DEBUG-SLOW-ACTIONS :
a) ganchos de depuração ( ações ) executam a lista em seu site.
b) Veja a duração de cada ação (não funciona): insira a descrição da imagem aqui

T.Todua
fonte
1

Não há duas solicitações exatamente iguais. Uma maneira rápida e suja (mas muito precisa) de descobrir o que está acontecendo é adicionar temporariamente uma linha ao início da do_actionfunção na wp-includes/plugin.phpqual registra o $tag, por exemplo:

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