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
Jacer Omri
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>';