Hooks de WordPress: ¿qué son y para qué se utilizan?

Si estás iniciándote en el mundillo del desarrollo de plugins y temas para WordPress, seguramente te esté empezando a sonar la palabra hook, pero ¿qué son los hooks de WordPress y para qué se utilizan?

La primera vez que leí la palabra hook, no pude evitar acordarme de aquella película mítica de Robin Williams y Dustin Hoffman. Pero, ¿qué tenían que ver Peter Pan y el Capitán Garfio con WordPress? Seguramente habría otra explicación y los hooks de WordPress eran otra cosa distinta.

Hooks de WordPress

Y efectivamente era así. Un hook (o gancho, como lo suelen traducir algunos desarrolladores) es un fragmento dentro del core de WordPress que te permite insertar tu propio código. En otras palabras: durante la ejecución de una web realizada con este CMS, cada vez que se llegue a una línea de código en la que se encuentra uno de estos hooks, este «enganchará» tu código personalizado y lo ejecutará en esa parte de la web, para así añadir nuevas funcionalidades o modificar las existentes.

El código que quieras cargar lo tendrás que insertar dentro de una función, o bien en el archivo functions.php de tu tema, o bien en un plugin que desarrolles tú mismo. Si lo que estás utilizando en tu web es un tema normal, no te recomiendo que escribas la función del hook en el archivo functions.php, pues en el momento en el que actualices, se perderá todo. Por el contrario, si estás utilizando un child-theme, puedes insertar la función que contiene el hook de WordPress sin ningún problema.

Pero, ¿de qué forma puedes desarrollar tu propia función y como la puedes cargar en la ejecución de WordPress? Si esta es la pregunta que se te ha pasado por la cabeza, tranquilo que te la voy a resolver. Para ello debes saber que los hooks se clasifican en dos tipos: actions (acciones) y filters (filtros).

Actions Hooks o hooks de acción

Los actions hooks son aquellos que te permiten añadir una nueva funcionalidad a WordPress. Imagina que quieres que cada vez que se añada una nueva entrada a tu web, te llegue un correo electrónico. Para ello, sigue los pasos de este fragmento de código:

Veamos lo que acabo de hacer. En primer lugar, he definido una función llamada «jmc87_publish_post», la cuál ejecuta el envío del correo electrónico. Debes saber que las funciones tienen que tener nombres únicos, es decir, que no puede haber otra función en todo el código de WordPress (core, plugins, theme,…) que se llame igual. Yo para ello, suelo poner un diminutivo de mi marca (jmc87) como prefijo del nombre de la función. En caso de que WordPress encontrase dos funciones llamadas de la misma forma, podría entrar en conflicto y dejar de funcionar. ¿No es eso lo que quieres para tu web, verdad?

El segundo paso que he realizado ha sido llamar a la función de WordPress que inserta los hooks en el core, a la espera de ser ejecutados. Esta función contiene dos parámetros (obligatorios):

  • Hook: Se trata del hook de WordPress que engancha la función en el momento en que se ejecuta.
  • Function: Aquí tendrás que indicar el nombre de la función que quieres que sea enganchada por el hook (que es la misma que definiste en el paso 1).

Tal y como te he dicho, estas líneas puedes escribirlas en el archivo functions.php de tu tema o en un plugin que desarrolles, ya dependiendo de la funcionalidad que vas a tener.

En resumen, un action hook funciona de la siguiente forma: imagina que tienes que recorrer un largo pasillo con puertas a ambos lados. En cada puerta puede haber una o varias personas que te tienen que acompañar hasta el final, o puede no haber nadie. Si hay alguien, le dirás «vente conmigo». Si no, pues nada, seguirás tu camino.

En este ejemplo, el pasillo será el código de WordPress que tiene que ejecutarse, las puertas los hooks y las personas que hay detrás de las puertas el código personalizado de plugins y temas que será enganchado.

Filters hooks o hooks de filtro

Los filters hooks son muy similares a sus hermanos, los actions hooks. La diferencia que existe entre un action hook y un filter hook es que, mientras que los primeros se utilizan para añadir nuevas funcionalidades a una web, los segundos se encargan de modificar las funcionalidades ya existentes. Imagina ahora que quieres que cada entrada que tienes en tu blog, añada al final de la misma «Hecho con amor por X», siendo X el nombre del autor. Para ello, sigue estos pasos:

Vamos a ver qué es lo que he hecho en esta ocasión. Primero, he definido una función llamada «jmc87_make_with_love», la cuál se encarga de incluir la coletilla al final del contenido de cada post. Al igual que ocurre con los actions hooks, esta función debe tener un nombre único.

A continuación, he hecho una llamada a la función de WordPress que inserta los filters en el core de WordPress a la espera de ser ejecutados. En este caso concreto, la función se ejecutará cada vez que se cargue el contenido de un post. Esta función (la de WordPress) contiene los mismos dos parámetros que su hermana gemela para los actions hooks.

En resumen, un filter hook funciona de la siguiente forma: imagina de nuevo el mismo pasillo con puertas del ejemplo anterior, solo que ahora en vez de existir la posibilidad de que haya personas detrás de cada puerta, estas se encontrarán detrás de todas las puertas de la derecha, mientras que detrás de las puertas de la izquierda habrá un complemento (sombrero, gafas, peluca,…) que deberás equipar a cada una de las personas que se encuentren en la puerta de enfrente.

En este ejemplo, el pasillo será de nuevo el código de WordPress que tiene que ejecutarse, las puertas de la izquierda los hooks, los complementos que hay detrás de ellas el código personalizado de plugins y temas que será enganchado y las personas que hay detrás de las puertas de la derecha el código de WordPress o contenido de la base de datos al que habrá que aplicar el filtro.

Conclusiones

Espero que con este artículo te haya quedado más claro qué son los hooks de WordPress y para qué se utilizan.

Para ampliar más información, puedes visitar el codex de WordPress y, como no, contactar conmigo o dejarme un comentario para preguntame aquellas dudas que tengas.

Leave a Comment