Come ottenere sequenze di ganci / azioni di WordPress?


48

In quale ordine vengono add_actioneseguiti gli hook?

vale a dire

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




MODIFICARE:

Ho anche pubblicato la mia soluzione.


Possibile duplicato di wordpress.stackexchange.com/questions/135857/… come il mio è stato pubblicato il 25 febbraio 14
Babu

Quello che ho visto nelle regole SE, l'età del solo argomento non conta più per la decisione di duplicazione: #
T.Todua,

Risposte:


82

"Dati! Dati! Dati!" pianse impazientemente. "Non posso fare mattoni senza argilla."

-L'avventura dei faggi in rame

Quindi raccogliamo alcuni dati reali da un'installazione senza plug-in e il tema TwentyTwelve attivato con un solo widget di testo.

Per la home page do_actionvengono effettuate le seguenti chiamate nel seguente ordine:

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 vuoi controllare l'ordine delle azioni e quante volte ognuno viene sparato, puoi usare ad esempio:

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

o questa versione predefinita:

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

});

per ottenere il seguente elenco:

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: dovresti anche dare un'occhiata al fantastico plug-in Query Monitor di John Blackbourn. (Non sono collegato a questo plugin)


Davvero molto bello!
jdm2112

Grazie per aver menzionato Query Monitor. Sembra essere un plugin utile in questo caso.
DAH,

@kraftner grazie per l'aggiornamento, ho sempre pianificato (ma me ne sono dimenticato) di collegarmi direttamente alla storia stessa come una fonte adeguata, ovviamente la mia ricerca di Sherlock Holmes non era eccezionale in quel momento ;-)
birgire

1
Mi è piaciuta la citazione e volevo vedere più contesto. E dato che avevo già il link per me, perché non aggiornarlo anche qui. :)
kraftner

1
Oltre 4 anni di post e ancora utili. Molte grazie!
Sebastian Kaczmarek,


3

Soluzione trovata!

Grazie @birgire per la bella risposta. Aggiungerò a quello, a muplugins_loadedvolte non viene attivato, quindi userò plugins_loadedcome primo hook (ma a quel tempo, l'autorizzazione dell'utente non è ancora stata eseguita. Se si desidera verificare l'autorizzazione dell'utente, initè la prima per questo). ..

ps esistono plugin eccellenti:

1) Monitoraggio delle query : puoi vedere tutto ciò che accade sul caricamento della pagina, ovvero la durata di ciascuna funzione eseguita e molto altro (visualizza tutti gli screenshot sulla pagina del plugin):

inserisci qui la descrizione dell'immagine

2) WP-DEBUG-BAR + WP-DEBUG-SLOW-ACTIONS :
a) hook di debug ( azioni ) eseguono l'elenco sul tuo sito.
b) Vedi la durata di ogni azione (non funzione): inserisci qui la descrizione dell'immagine


1

Non ci sono due richieste esattamente uguali. Un modo rapido e sporco (ma molto accurato) per scoprire cosa sta succedendo è quello di aggiungere temporaneamente una riga all'inizio della do_actionfunzione in wp-includes/plugin.phpcui registra $tag, ad esempio:

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.