Obtener una lista de todas las acciones registradas
Estoy intentando depurar un plugin que no desarrollé y quiero listar todas las acciones registradas. He leído este hilo de SO:
- WordPress: Cómo obtener todas las funciones registradas para el filtro 'the_content' - StackOverflow
Pero es específico para un hook y trata sobre filtros, no acciones.
¿Existe alguna variable como $wp_filter
o algo similar?
Los filtros y acciones se asignan a hooks. Las funciones asignadas a hooks se almacenan en la variable global $wp_filter
. Así que todo lo que tienes que hacer es usar print_r
en ella.
print_r($GLOBALS['wp_filter']);
PD: La función add_action
realiza una llamada a add_filter
. Y esta última hace $wp_filter[$tag][$priority][$idx]
.
NOTA: puedes agregar directamente este código en functions.php, y verás un debug en tu sitio:
add_action('wp', function(){ echo '<pre>';print_r($GLOBALS['wp_filter']); echo '</pre>';exit; } );

bueno, pero ¿dónde puedo depurarlos? intenté agregar if(WP_DEBUG == true){ global $wp_filter; print_r($wp_filter); } en index.php y obtuve NULL

Pregunta original relacionada con los hooks de acción.
...Pero es específico para un hook y se trata de filtros, no de acciones.
¿Existe alguna variable como $wp_filter o algo así?
Entonces, la respuesta es Sí, existe. Es la variable global $wp_actions
.
Consulta wp-includes/plugin.php alrededor de la línea 31 (para WP 6.4.2) donde primero se declara la variable $wp_actions
como global
...sin ninguna descripción.
Desplázate hacia abajo hasta la función do_action()
en la línea correspondiente. Lee su bloque de documentación.
* @global int[] $wp_actions Almacena el número de veces que se activó cada acción.
Entonces, esta variable es para almacenar los hooks de tipo acción que fueron activados.
Para cualquiera que llegue a esta página desde un motor de búsqueda y esté buscando filtros activados, sí está en $wp_filters
NO en $wp_filter
.
Para ver qué acciones fueron activadas. En tu código, engancha al hook shutdown
(o cualquier acción que no sea demasiado temprana) y luego...
global $wp_actions;
echo '<pre>'.htmlspecialchars(print_r($wp_actions, true)).'</pre>';
