inicio/ noticias/ Guías para Principiantes

Qué es el hook en WordPress y cómo funciona

Qué es un hook en WordPress y sus tipos

Descubre qué es un hook en WordPress, los tipos que existen y cómo funcionan para modificar el comportamiento de temas y plugins sin tocar el núcleo.

Qué es un hook en WordPress

Un hook en WordPress es un mecanismo que permite a desarrolladores insertar código personalizado en puntos específicos de la ejecución del sistema, sin necesidad de modificar los archivos del núcleo. Es, en esencia, el sistema nervioso que conecta plugins, temas y funcionalidades entre sí.

WordPress ejecuta miles de líneas de código cada vez que carga una página. Los hooks son puntos estratégicos dentro de ese flujo donde tú puedes «engancharte» para añadir, modificar o eliminar comportamientos. Este concepto existe desde las primeras versiones del CMS y es lo que ha permitido que el ecosistema de WordPress crezca hasta alcanzar más del 43% de cuota en la web, según datos de W3Techs.

Sin hooks, cada personalización requeriría editar directamente los archivos del core. Eso haría que cualquier actualización sobrescribiera tus cambios. Los hooks resuelven este problema de raíz: te dan un sistema estandarizado para intervenir en el flujo de ejecución de forma segura y mantenible.

Los dos tipos de hooks: actions y filters

Existen exactamente dos tipos de hooks en el ecosistema WordPress, y entender la diferencia entre ambos es fundamental antes de escribir una sola línea de código.

📩 Recibe guías técnicas WordPress gratis

Contenido práctico sobre desarrollo WordPress y WooCommerce directamente en tu correo. Sin spam.

Quiero recibirlas →

Actions (acciones)

Un action hook te permite ejecutar código en un momento concreto. No devuelve nada; simplemente «hace algo» cuando WordPress llega a ese punto. Algunos de los más conocidos:

  • init: se dispara después de que WordPress ha terminado de cargarse pero antes de enviar las cabeceras HTTP. Ideal para registrar custom post types o taxonomías.
  • wp_enqueue_scripts: el lugar correcto para cargar hojas de estilo y archivos JavaScript en el front-end.
  • wp_footer: se ejecuta justo antes de cerrar la etiqueta </body>. Útil para scripts de tracking o código de terceros.
  • save_post: se activa cada vez que se guarda una entrada. Permite ejecutar lógica adicional como enviar notificaciones o sincronizar datos con sistemas externos.

Para «engancharte» a una acción, usas la función add_action(). El primer parámetro es el nombre del hook, el segundo es la función que quieres ejecutar. Opcionalmente puedes definir prioridad (por defecto 10) y número de argumentos.

person using macbook pro on black table
Photo by Myriam Jessier on Unsplash

Filters (filtros)

Un filter hook funciona de forma diferente: recibe un dato, te permite modificarlo y lo devuelve transformado. Es como una estación intermedia donde el dato para, se procesa y sigue su camino.

  • the_content: filtra el contenido de cada entrada antes de mostrarlo. Puedes añadir texto, modificar formato o insertar elementos dinámicos.
  • the_title: permite alterar el título de una entrada antes del renderizado.
  • woocommerce_product_get_price: modifica el precio de un producto de WooCommerce antes de mostrarlo (útil para descuentos dinámicos o conversiones de divisa).
  • wp_mail: intercepta los datos de cualquier correo que WordPress esté a punto de enviar, permitiendo cambiar destinatario, asunto o contenido.

Los filtros se registran con add_filter() y siempre deben incluir un return con el valor modificado. Si olvidas devolver el dato, ese valor desaparece del flujo y puede romper funcionalidades de forma silenciosa.

Cómo funciona un hook en la práctica

Imaginemos un caso real. Tienes una tienda WooCommerce y necesitas añadir un aviso legal justo debajo de la descripción de cada producto. Sin hooks, tendrías que editar la plantilla del tema directamente. Con un hook de tipo action, escribes una función en tu archivo functions.php o en un plugin personalizado:

Registras tu función en el hook woocommerce_after_single_product_summary con una prioridad de 15 (para que aparezca después de los elementos con prioridad inferior). WordPress ejecuta tu función exactamente en ese punto del flujo. Si mañana cambias de tema, el aviso sigue funcionando porque el hook lo proporciona WooCommerce, no el tema.

Ahora un ejemplo de filtro. Supongamos que quieres añadir un prefijo «[OFERTA]» a todos los títulos de productos en oferta. Usas el filtro the_title, compruebas si el post es un producto y si está en oferta, y devuelves el título modificado. El dato original entra, tu función lo transforma, y sale con el cambio aplicado.

Prioridad y número de argumentos

Cada vez que registras un hook, puedes especificar la prioridad con un número entero. Cuanto menor sea el número, antes se ejecuta tu función. Esto es crítico cuando múltiples plugins o funciones compiten por modificar el mismo dato. Un plugin de caché que se engancha con prioridad 5 actuará antes que uno con prioridad 20.

El cuarto parámetro de add_action() y add_filter() indica cuántos argumentos recibe tu función callback. Por defecto es 1, pero muchos hooks de WooCommerce pasan 2 o 3 argumentos (por ejemplo, el ID del pedido junto con el objeto del pedido). Si no declaras el número correcto, tu función no recibirá los datos que necesita.

Hooks personalizados: creando tus propios puntos de extensión

WordPress no solo te permite usar los hooks existentes; también puedes crear los tuyos propios con do_action() y apply_filters(). Esto es especialmente relevante cuando desarrollas plugins o temas que otros desarrolladores van a extender.

Imagina que creas un plugin de reservas. En el momento en que se confirma una reserva, disparas un action hook personalizado como mi_plugin_reserva_confirmada. Cualquier otro plugin puede engancharse ahí para enviar un SMS, actualizar un CRM o generar una factura. Has convertido tu plugin en una plataforma extensible.

El Plugin Handbook de WordPress documenta esta práctica como estándar de desarrollo. Los plugins más robustos del ecosistema (WooCommerce tiene más de 1.500 hooks documentados) siguen este patrón para maximizar la interoperabilidad.

Buenas prácticas al trabajar con hooks

Existen varias convenciones que marcan la diferencia entre código mantenible y código problemático:

  • Prefija tus funciones: usa un prefijo único para evitar colisiones de nombres. Si tu proyecto se llama «Acme», tus funciones deberían empezar por acme_.
  • No uses funciones anónimas si necesitas que el hook pueda desengancharse luego con remove_action() o remove_filter(). Las funciones anónimas no tienen nombre y por tanto no se pueden eliminar.
  • Documenta la prioridad: cuando eliges una prioridad que no sea la predeterminada (10), deja un comentario explicando por qué. Tu «yo del futuro» te lo agradecerá.
  • Siempre devuelve el valor en un filtro: parece obvio, pero es uno de los errores más frecuentes. Un filtro sin return equivale a devolver null, y eso puede romper el flujo completo.
  • Evita lógica pesada en hooks de alta frecuencia: hooks como the_content o init se ejecutan en cada carga de página. Consultas a base de datos complejas dentro de estos hooks impactan directamente en el tiempo de respuesta del servidor.

Cuándo se usan los hooks en proyectos reales

El sistema de hooks es la base de prácticamente toda personalización profesional en WordPress. Algunos escenarios donde resultan imprescindibles:

  • Personalización del proceso de compra: añadir campos al checkout, modificar emails transaccionales, aplicar descuentos por rol de usuario.
  • Integración con sistemas externos: sincronizar pedidos con un ERP, enviar datos a un CRM cuando un usuario se registra, conectar con APIs de logística.
  • Modificación del comportamiento del admin: añadir columnas personalizadas al listado de entradas, ocultar menús según rol, alterar el dashboard.
  • SEO y rendimiento: modificar las etiquetas meta dinámicamente, controlar la carga de scripts según la página, implementar lazy loading condicional.

En todos estos casos, los hooks permiten que el código personalizado conviva con actualizaciones del core, del tema y de otros plugins sin conflictos. Es el patrón de diseño que hace posible que WordPress funcione como plataforma, no solo como aplicación.

El hook como concepto arquitectónico

Más allá de la implementación técnica, entender el sistema de hooks de WordPress implica comprender un patrón de diseño conocido como «observer» o «pub/sub» (publicador-suscriptor). WordPress «publica» eventos en puntos clave de su ejecución, y cualquier código puede «suscribirse» a esos eventos para reaccionar.

Este patrón no es exclusivo de WordPress. Frameworks como Laravel, React o Node.js implementan variaciones del mismo concepto. Pero en WordPress, su implementación es especialmente accesible: no necesitas entender programación orientada a objetos avanzada para usar hooks de forma efectiva. Basta con una función y una línea de registro.

Esa accesibilidad es, paradójicamente, tanto la mayor fortaleza como el mayor riesgo del sistema. Permite que desarrolladores con distintos niveles de experiencia extiendan WordPress, pero también facilita que se acumule código ineficiente cuando no se siguen las buenas prácticas mencionadas arriba.

Si estás evaluando cómo abordar un proyecto WordPress que requiere personalización profunda — más allá de lo que ofrece un tema o plugin estándar — puedes consultar los servicios de desarrollo WordPress a medida para entender qué tipo de soluciones son posibles con un enfoque técnico especializado.

Mi opinión como desarrollador WordPress

Desde mi experiencia, el dominio de los hooks marca la frontera real entre «usar WordPress» y «desarrollar sobre WordPress». He visto proyectos donde un solo filtro bien colocado ahorraba semanas de trabajo, y otros donde la falta de comprensión del sistema de prioridades generaba bugs imposibles de rastrear. Lo que noto con frecuencia es que muchos desarrolladores aprenden a usar add_action mecánicamente sin entender el flujo completo de ejecución, y eso limita su capacidad para resolver problemas complejos. Mi recomendación siempre es la misma: antes de escribir código, leer el código fuente del hook que vas a utilizar. Entender qué datos pasan y en qué orden cambia por completo la calidad del resultado final.

¿Necesitas ayuda con tu proyecto? Trabajo con negocios y agencias en WordPress, WooCommerce, IA e integraciones. Escríbeme y lo vemos juntos.

fernandodomecq
// Sobre el autor

fernandodomecq

Desarrollador WordPress freelance especializado en WooCommerce, integraciones e IA. Escribo sobre proyectos web, agencias y buenas prácticas técnicas.

Ver todos los artículos
// Compartir
// contacto — respuesta en < 24h

¿Hablamos de
tu proyecto?

hola@fernandomecq.com