Timber by EMSIEN-3 LTD
Tags Posts tagged with "hooks"

hooks

0 560

Te han encargado mudar cierta funcionalidad de WordPress y no tienes ni idea de por dónde empezar. ¡Menudo cobrizo! Te has descargado el código fuente y hallas un montón de ficheros en PHP. Y tu primera intención como programador es encontrar dónde debes iniciar a meter código para hacer lo que te han pedido. Primer error grave: jamás alteres el código fuente de WordPress. En serio, no lo hagas. La solución está en los WordPress Hooks.

Cómo ya sabes, o bien seguramente intuyes, WordPress se encarga de construir las webs HTML que puedes ver en tu navegador desde el servidor. Cuando llega una petición, se empieza el Loop de WordPress. Si quieres alterar estilos, deberás incorporar código CSS en los ficheros de tu tema, mas si precisas cambios estructurales más concluyente tendrás que ir al código fuente.

Modificando el código fuente de WordPress
Este eres , modificando el código fuente de WordPress.

Modificar las líneas de código del núcleo de WordPress puede parecer acertado, mas ni muchísimo menos lo es. Primero por el hecho de que puedes romper muchas cosas, y segundo por el hecho de que cuando actualizes a una nueva versión vas a perder los cambios muy posiblemente, pues los ficheros del core se sobrescriben. Y además, ya sabemos que no actualizar es una muy mala idea.

Afortunadamente, los WordPress Hooks son un mecanismo que nos van a permitir modificar el código fuente de WordPress sin realmente tocarlo. ¿Parece algo imposible? Verás que no. Permíteme que te lo pruebe.

¿Qué son los WordPress Hooks?

Simplificando al máximo, los Hooks de WordPress son puntos específicos en el código fuente de WordPress donde podemos conectar nuestras funciones para alterar algunos contenidos o bien comportamientos.

Como ya ves, la palabra hook puede traducirse como gancho, y en el caso que tratamos, estos ganchos nos dejan colgar funciones de ellos, como si se tratara de un sobretodo en una percha. Al colgar (o bien enganchar) nuestras funciones en un hook (o gancho), cuando la ejecución de WordPress llegue a ese hook, nuestra función se ejecutará, haciendo lo que hayamos programado.

Action Hooks y Filter Hooks

Existen dos tipos diferentes de hooks en WordPress: las acciones y los filtros. Si bien los dos son conceptos muy similares en lo que se refiere a la forma de emplearlos, su comportamiento es diferente.

Las acciones (o bien Action Hooks) nos permiten ejecutar funciones propias, aparte de las funciones que ya se incluyen en el código de WordPress para tal acción. Los filtros, en cambio, nos dejan modificar una funcionalidad existente. Esencialmente podemos ver a las acciones y filtros como acontecimientos concretos que al acontecer llaman a las funciones nuestras que les hayamos asociado.

La primordial diferencia entre acciones y filtros es que los filtros deben regresar un factor a la función original. Esto significa que toman un parámetro del código sobre el que filtran, lo alteran de alguna forma y lo devuelven cambiado.

Por otro lado, las acciones sencillamente agregan código auxiliar al punto donde se enganchan, sin tener en cuenta qué más se hace en ese punto.

Por ejemplo, si queremos cambiar el texto de una entrada, podemos añadir una función propia a la acción publish_post (la tienes aquí en el Codex) que modifique la entrada en el instante de publicarla. O podemos añadir una función en el filtro the_content (aquí en el Codex) que modifique la entrada cuando se está a puntito de pintar en el navegador del visitante.

No te preocupes si todavía tienes dudas entre acciones y filtros, probablemente se despejen cuando veas el código.

La estructura de un hook

Para definir una función y engancharla en un hook de WordPress, sólo hemos de definir la función y usar la llamada add_action o bien add_filter, como vemos a continuación:

Ten en cuenta que add_action la utilizamos cuando queremos engancharnos a un Action Hook, al paso que add_filter cuando deseamos engancharnos a un Filter Hook. No obstante, add_filter no es más que un alias a add_action (interiormente hace una llamada a add_action), con lo que podríamos emplear siempre y en toda circunstancia add_action y no pasaría nada.

Veamos los parámetros que acepta la función add_action para acotar el enganchamiento de tu función de un hook de WordPress específico (ver línea 5 del código anterior):

  • nombre_del_hook: El nombre de la acción o filtro concreto de WordPress, e señala a qué evento asociar nuestra función.
  • mi_funcion: El nombre de la función que deseamos asociar con el hook específico. Puede ser una función estándar de PHP, una función existente en el código fuente de WordPress, o una función que definamos (como sucede en el ejemplo precedente, líneas dos a 4).
  • prioridad: Es un parámetro opcional utilizado para precisar el orden en el que la función asociada al hook se marcha a ejecutar. Es un valor entero (un número, vaya) y por defecto si no ponemos nada tiene un valor de 10. Señalar un número más bajo señala que deseamos que nuestra función sea más prioritaria que otras. Si hay más de una función asociada a un hook concreto y tienen la misma prioridad, se ejecutan en el orden en el que se hayan añadido al hook.
  • parametros: Es un parámetro opcional cuyo valor es un entero (otro número) que señala cuántos factores debe aceptar la función que asociamos al hook. Por defecto el valor es 1, si bien existen algunos hooks que pueden pasar más de una parámetro a la función.

Como lo mejor es ver ejemplos, vamos a comenzar por agregar una función que mande un correo al autor de una entrada cuando esta se publica en nuestro WordPress. Empleamos la Action Hook publish_post que ya hemos citado antes y la función wp_mail que puedes ver aquí en el Codex:

Fíjate que asociamos la función notifica_al_autor al Action Hook publish_post a través de add_action. La función que hemos enganchado lo único que hace es una llamada a wp_mail para mandar un correo al autor de la entrada.

Y ahora veremos un caso de filtro:

Como puedes intuir mirando el código, usamos el filtro the_title que nos permite alterar el título de entradas cuando las devolvemos desde la base de datos de WordPress. En este caso enganchamos al filtro una función nuestra cuyo nombre es incluye_exclusiva que añade el texto "¡Exclusiva!" delante de un título cuando la entrada pertenece a la categoría Exclusiva.

De este modo, hemos visto dos ejemplos de cómo alterar el comportamiento por defecto de WordPress sin tener que que tocar el código fuente del propio WordPress. El interrogante que probablemente te estarás haciendo es: si no puedo tocar el código fuente, ¿dónde he de poner el código de los hooks que hemos visto en los ejemplos para que funcione? Prosigue leyendo para saber la respuesta.

Cómo implementar WordPress Hooks

Hay múltiples maneras de añadir código que incorpora funciones socias a hooks en WordPress. Primordialmente, podemos incorporar este código en el archivo functions.php de tu tema, o bien incluso mejor, en un tema hijo. De esta forma tus funciones van a estar disponibles para ser ejecutadas.

Otra opción es crear un complemento nuevo dónde incluir estas funciones al lado de las llamadas a add_filter y add_action. Esto puede ser algo más difícil, si no sabemos trabajar con complementos, con lo que te invito a iniciar con el fichero functions.php. Tan sólo tenemos que ir a Apariencia » Editor dentro del Escritorio de WordPress y ahí seleccionar el tema que tenemos activo. Buscamos el fichero functions.php y agregamos el código que queramos, siguiendo las directrices explicadas en la sección anterior.

Tienes que tener un par de cosas en cuenta cuando hagas esto. La primera es no confundirte con la sintaxis PHP, ya que si escribes mal el código puedes tirar por los suelos toda tu web. Lo mejor para esto es bajarte por FTP el fichero functions.php a tu PC, guardar una copia sin ninguna modificación (por si las moscas) y editar una copia en local. Cuando hayas acabado y estés seguro que está bien, súbelo de nuevo por FTP y comprueba que todo funciona bien. Si te hubieses equivocado y tu página web no marcha, no pasa nada; vuelve a subir la copia original del fichero.

La otra cosa a tomar en consideración es que el nombre de la función que asocies a un hook debe ser único. Si utilizas un nombre que otro complemento o bien tema ya utilice, tendrás problemas. Con lo que acostumbra a estar bien agregar un prefijo ya antes del nombre de la función. Por servirnos de un ejemplo, en la función precedente incluye_exclusiva podríamos emplear mejor wprincipiante_incluye_exclusiva, en tanto que probablemente absolutamente nadie más a parte de nosotros usará nombres de función que empiecen por wprincipiante_.

Por último, si deseamos desactivar una acción o un filtro solo tenemos que llamar a las funciones remove_action o remove_filter:

En el ejemplo precedente vemos de qué manera desactivar la asociación entre los hooks y las funciones de los ejemplos que hemos visto antes. Y si deseas volver a activar una función que hayamos desactivado, tan solo debes volver a hacer al llamada a add_action o add_filter. Tan simple como eso.

Solo un apunte más para finalizar. Si al emplear add_action o add_filter señalaste una prioridad diferente del valor por defecto de 10, al hacer remove_action o bien remove_filter deberás detallar el valor concreto para que la desactivación funcione. Y recuerda no quitar nada salvo que estés seguro de lo que haces.

Para saber más

Este artículo no es más que una introducción básica a los hooks en WordPress. Si deseas entrar en más detalle en determinados aspectos, debes visitar el Codex de WordPress, donde hallarás todo lo necesario para transformarte en un crack del desarrollo.

En concreto, deberías echarle un ojo a las próximas secciones del Codex:

Resumen final

En esta entrada has conocido los WordPress Hooks, y específicamente las acciones y filtros que nos dejan modificar el comportamiento de WordPress sin cambiar el código fuente.

Tanto si piensas desarrollar o bien modificar temas de WordPress o si quieres crear complementos, los WordPress Hooks son los ganchos que te van a permitir agregar código propio (engancharte) a determinados puntos de la ejecución de WordPress, tal como filtrar ciertos datos para modificar sus valores.

Además de ver de qué forma implementar hooks incluyendo nuestras propias funciones PHP, hemos visto de qué manera desactivarlos. Al principio trabajar con ellos es un poco liado, pero con el tiempo todo es mucho más dinámico.

Para acabar solo me queda repetir que no toques el código fuente de WordPress de forma directa, sino que utilices los Hooks. Y si tienes dudas, siempre y en toda circunstancia las puedes describir en los comentarios, donde intentaremos asistirte a resolverlas.

Imagen señalada de haru__q.

ARTÍCULOS ALEATORIOS

0 830
WordPress es conocido por su facilidad de instalación. Sin embargo, siempre va bien recordar los pasos a seguir a fin de evitar posibles inconvenientes....