Ottenere una lista di tutte le azioni registrate
Sto cercando di debuggare un plugin che non ho sviluppato e vorrei elencare tutte le azioni registrate. Ho letto questa discussione su SO:
Ma è specifica per un singolo hook e riguarda i filtri, non le azioni.
Esiste una variabile come $wp_filter
o qualcosa di simile?
I filtri e le azioni vengono entrambi assegnati agli hook. Le funzioni assegnate agli hook sono memorizzate nella variabile globale $wp_filter
. Quindi tutto ciò che devi fare è utilizzare print_r
su di essa.
print_r($GLOBALS['wp_filter']);
PS. La funzione add_action
effettua una chiamata a add_filter
. E quest'ultima esegue $wp_filter[$tag][$priority][$idx]
.
NOTA: puoi aggiungere direttamente questo codice in functions.php e vedrai un debug sul tuo sito:
add_action('wp', function(){ echo '<pre>';print_r($GLOBALS['wp_filter']); echo '</pre>';exit; } );

bene, ma dove posso fare il debug? ho provato ad aggiungere if(WP_DEBUG == true){ global $wp_filter; print_r($wp_filter); } in index.php ma ho ottenuto NULL

Domanda originale relativa agli action hook.
...Ma è specifico per un hook e riguarda i filtri, non le azioni.
Esiste una variabile come $wp_filter o qualcosa di simile?
Quindi, la risposta è Sì, esiste. È la variabile globale $wp_actions
.
Fai riferimento a wp-includes/plugin.php intorno alla riga 31 (per WP 6.4.2) dove viene dichiarata per la prima volta la variabile $wp_actions
come global
...senza alcuna descrizione.
Scorri verso il basso fino alla funzione function do_action()
. Leggi il loro doc-block.
* @global int[] $wp_actions Memorizza il numero di volte in cui ogni azione è stata attivata.
Quindi, questa variabile serve per memorizzare gli hook di tipo action che sono stati attivati.
Per chiunque arrivi su questa pagina da un motore di ricerca e stia cercando i filtri attivati, sì si trova in $wp_filters
NON $wp_filter
.
Per vedere quali azioni sono state attivate. Nel tuo codice, agganciati all'azione shutdown
(o a qualsiasi azione che non sia troppo precoce) e poi...
global $wp_actions;
echo '<pre>'.htmlspecialchars(print_r($wp_actions, true)).'</pre>';
