remove_action() y remove_filter()

remove_action() y remove_filter() eliminan un callback que fue registrado previamente con add_action() o add_filter(). Son la forma correcta de desactivar funcionalidades sin modificar el código original.

Sintaxis

remove_action( $hook, $callback, $prioridad );
remove_filter( $hook, $callback, $prioridad );

// ⚠ La prioridad debe coincidir EXACTAMENTE con la del add_action/add_filter original

Ejemplos del núcleo de WordPress

// Eliminar el meta generator (<meta name="generator">) del head
remove_action( 'wp_head', 'wp_generator' );

// Eliminar el feed RSS del head
remove_action( 'wp_head', 'feed_links', 2 );

// Eliminar el pingback del head
remove_action( 'wp_head', 'wp_shortlink_wp_head' );

// Eliminar el filtro de emojis de WordPress
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_filter( 'the_content', 'convert_smilies', 20 );

Eliminar un hook de un plugin/tema — timing correcto

// El callback debe estar registrado antes de intentar eliminarlo
// Usa un hook de mayor prioridad o espera al hook adecuado

add_action( 'init', 'eliminar_hooks_tema', 20 ); // prioridad 20 = después del setup del tema (prioridad 10)
function eliminar_hooks_tema() {
    // Eliminar algo que el tema registró en after_setup_theme
    remove_action( 'wp_footer', 'tema_creditos_footer' );
}

Eliminar método de una clase instanciada

// Necesitas acceso a la instancia del objeto
global $mi_plugin;
remove_action( 'wp_head', [ $mi_plugin, 'añadir_meta_tags' ], 10 );

Limitación importante

// ❌ NO se puede eliminar una closure
add_action( 'init', function() { /* ... */ } );
// No hay forma de hacer remove_action de esto — sin nombre, sin referencia

// ✅ Siempre nombra las funciones si quieres poder eliminarlas después