has_action() y has_filter()
has_action() y has_filter() comprueban si un hook tiene callbacks registrados. Pueden usarse para verificar si una función específica está enganchada o simplemente si el hook tiene algo registrado.
Sintaxis
// Comprobar si el hook tiene ALGÚN callback
has_action( $hook_name );
has_filter( $hook_name );
// Comprobar si un callback ESPECÍFICO está enganchado
has_action( $hook_name, $callback );
has_filter( $hook_name, $callback );
Valores que devuelven
false— no hay ningún callback registradoint— la prioridad del callback (si se buscó un callback específico)
Ejemplo: ejecutar solo si hay callbacks
// Evitar llamar do_action si nadie está escuchando
if ( has_action( 'mi_plugin_evento' ) ) {
$datos = preparar_datos_costosos(); // solo si alguien lo necesita
do_action( 'mi_plugin_evento', $datos );
}
Ejemplo: detectar si un plugin está activo por su hook
// Comprobar si WooCommerce está activo buscando uno de sus hooks
if ( has_action( 'woocommerce_init' ) ) {
// WooCommerce está cargado
mi_integracion_woocommerce();
}
Ejemplo: comprobar si una función específica está enganchada
add_action( 'wp_footer', 'mi_funcion', 15 );
// Comprobar si está registrada (devuelve 15, la prioridad)
$prioridad = has_action( 'wp_footer', 'mi_funcion' );
// $prioridad === 15 → está registrada con prioridad 15
// $prioridad === false → no está registrada
if ( $prioridad ) {
remove_action( 'wp_footer', 'mi_funcion', $prioridad );
}
Uso para evitar registros duplicados
// Asegurarse de no añadir el mismo callback dos veces
if ( ! has_action( 'init', 'mi_funcion_init' ) ) {
add_action( 'init', 'mi_funcion_init' );
}
