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 registrado
  • int — 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' );
}