Qué son los hooks de WordPress: actions y filters
Los hooks son la razón por la que puedes instalar un plugin y que cambie el comportamiento de WordPress sin que nadie haya editado el núcleo. Son el sistema de extensibilidad: puntos en el código donde WordPress dice «si alguien tiene algo que añadir aquí, que lo haga ahora». Entenderlos es lo que separa a quien personaliza WordPress modificando archivos del core (mal) de quien lo hace correctamente.
Dos tipos de hooks: actions y filters
Actions: permiten ejecutar código en un momento específico. WordPress llega a ese punto, tu función se ejecuta, hace lo suyo, y el flujo continúa. No devuelves ningún valor.
Filters: permiten modificar un dato antes de que WordPress lo use. WordPress tiene un valor, lo pasa por el filtro y recibe de vuelta el valor modificado (o no). Siempre debes devolver algo desde una función de filtro.
Cómo usar add_action
add_action( 'hook_name', 'mi_funcion', $prioridad, $num_args );
function mi_funcion() {
// Código que se ejecuta cuando ocurre hook_name
}
La prioridad (por defecto 10) determina el orden cuando varias funciones están enganchadas al mismo hook: número menor = se ejecuta antes.
Ejemplo real: cargar scripts solo en páginas específicas.
add_action( 'wp_enqueue_scripts', 'cargar_mi_script' );
function cargar_mi_script() {
if ( is_page('contacto') ) {
wp_enqueue_script( 'mi-script', get_template_directory_uri() . '/js/contacto.js', array(), '1.0', true );
}
}
Cómo usar add_filter
add_filter( 'hook_name', 'mi_filtro', $prioridad, $num_args );
function mi_filtro( $valor ) {
// Modificar $valor
return $valor; // Siempre devuelve algo
}
Ejemplo real: modificar la longitud del extracto.
add_filter( 'excerpt_length', 'mi_longitud_extracto' );
function mi_longitud_extracto( $length ) {
return 30; // 30 palabras en lugar de las 55 por defecto
}
Ejemplo real: añadir texto al final de cada post.
add_filter( 'the_content', 'anadir_firma_post' );
function anadir_firma_post( $content ) {
if ( is_single() ) {
$content .= '<p>¿Te ha resultado útil? Comparte el artículo.</p>';
}
return $content;
}
Hooks más usados en el desarrollo diario
wp_enqueue_scripts: para cargar scripts y estilos en el frontend. El lugar correcto, nunca directamente en el header.php.
admin_enqueue_scripts: igual pero para el panel de administración.
init: se ejecuta después de que WordPress carga pero antes de mostrar cabeceras. Para registrar tipos de post personalizados, taxonomías o hacer redirecciones.
save_post: se ejecuta cuando se guarda un post. Para añadir lógica al guardar contenido.
the_content: filtro que pasa el contenido de cada post antes de mostrarlo.
wp_head: para añadir código en el <head> de todas las páginas.
wp_footer: para añadir código antes del cierre de </body>.
Dónde poner el código de hooks
El lugar correcto es el functions.php del tema hijo. Si el código es independiente del tema, lo correcto es crear un plugin específico con ese código — sobrevive a los cambios de tema.
Nunca en los archivos del tema padre: desaparecen con cada actualización. Nunca directamente en el core de WordPress: los perderás con la próxima actualización y no hay ninguna razón técnica para hacerlo.