Los hooks de WordPress, un recurso imprescindible para desarrollar un plugin


Share on FacebookTweet about this on TwitterShare on LinkedInEmail this to someoneShare on Google+

Como adelantábamos en nuestro anterior artículo Introducción a la creación de plugins para WordPress, los hooks  (ganchos en inglés) de WordPress nos permiten enganchar nuestro código en puntos específicos del flujo de ejecución de WordPress, de modo que, sin tener que alterar el core del CMS, podemos aplicar nuevas funcionalidades al CMS. Realmente, los hooks no son algo exclusivo del desarrollo de plugins, aunque nosotros nos centramos en esa parte dentro de esta serie de artículo, sino que constituyen un recurso imprescindible para cualquier desarrollador que desee modificar la forma de trabajar de WordPress.

Básicamente, podríamos decir que existen tres tipos de hooks fundamentales: de infraestructura, las actions o acciones y los filters o filtros:

  • Los hooks de infraestructura, también llamados hooks básicos, sirven para realizar la operativa de instalar o desinstalar plugins.
  • Las hooks de acciones o actions permiten añadir funcionalidad a WordPress.
  • Los hooks  de filtros o filters permiten alterar el contenido que se muestra al usuario en el sitio web

Vamos a comenzar con un poco de teoría sobre estos tipos de hooks y luego veremos un ejemplo que los utilice.

Hooks de infraestructura

Hay tres hooks básicos que sirven para crear la infraestructura necesaria para que los plugins funcionen. Imagina que tu plugin necesita crear tablas en la base de datos, o agregar opciones en la tabla de options. Para poder realizar estas operativas necesitas tres hooks:

  • register_activation_hook(). Sirve para definir acciones a realizar cuando el plugins se activa.
  • register_deactivation_hook(). Acciones que debe realizar al desactivar el plugin, que no borren todos los datos definitivamente, puesto que se supone que el plugin podría volver a activarse más tarde.
  • register_uninstall_hook(), Este hook se activa al desinstalar el plugin y mediante su uso deberíamos asegurarnos de borrar todos los datos que el plugin haya almacenado en el CMS.

Veremos ejemplos de hooks de infraestructura cuando realicemos plugins un poco más complejos.

Hooks de acciones

Nos permiten cambiar la manera con la que WordPress trabaja, añadiendo la ejecución de una función propia a puntos de ejecución específicos. WordPress implementa ya muchos puntos de ejecución y nosotros podríamos definir algunos personalizados.

Existen dos funciones creadas específicamente para añadir acciones y borrarlas:

  • add_action(): que permite definir un punto de ejecución de WordPress y el nombre de una función que se ejecutará en ese punto.
  • remove_action(): que sirve para borrar una acción previamente creada sobre un hook. Es útil por ejemplo cuando un plugin modifica el comportamiento de otro, primero se podría eliminar una acción previamente definida y luego incorporar una nueva más especializada.

Ambas funciones requieren como parámetros el nombre del hook donde se quieren enganchar y el nombre de una función que se debe ejecutar en ese punto.

Por ejemplo, este código provocaría que después de hacer un loop (por ejemplo, en la home para recorrer todas las últimas entradas), se escribiese en la página Fin del loop.

function fin_loop() {
  echo 'Fin del loop';
}
add_action('loop_end', 'fin_loop');

Hooks de filtros

Se diferencian de las acciones en que nunca modifican cómo funciona WordPress, por lo que realizan su cometido y nunca deben tener efectos laterales que modifiquen otras operativas dentro del CMS.

Básicamente funciones similares para controlar los filtros.

  • add_filter(). Sirve para modificar un contenido de alguna manera y devolver el nuevo contenido modificado (filtrado).
  • remove_filter(). Para eliminar un filtro creado anteriormente

Igual que antes, para implementar código como un filtro, necesitamos definir el nombre del hook y la función que se debe de ejecutar como filtro. Ten en cuenta que la función de filtrado debe devolver un valor, que será el resultado de aplicar el filtro.

Por ejemplo, el siguiente código, cada vez que se va a mostrar el título de un post con la función the_title(), provocaría que, si el título tiene la palabra “test” se imprima “hohoho” en lugar del título real.

function detectar_test($title) {
    if (strpos($title, 'test')) {
      return 'hohoho';
    } else {
      return $title;
    }
}
add_filter('the_title', 'detectar_test');

Ejemplo de plugin

Solamente para acabar, podemos ver el código de un plugin que hemos denominado miscelánea y  que recoge los ejemplos de hooks vistos antes, para acciones y filtros.

<?php
/*
Plugin Name: Miscelánea
Description: Dos ejemplos de Hooks
Author: Arsys Internet
Author URI: https://www.arsys.es/
*/

function detectar_test($title) {
    if (strpos($title, 'test')) {
      return 'hohoho';
    } else {
      return $title;
    }
}
add_filter('the_title', 'detectar_test');
function fin_loop() {
  echo 'Fin del loop';
}
add_action('loop_end', 'fin_loop');

Como vimos en el artículo Introducción a la creación de plugins para WordPress, el código del plugin tienes que ubicarse dentro de la carpeta correspondiente, en el directorio wp-content/plugins, tal como se puede ver en la siguiente imagen.

Para que funcione deberás activar el plugin y obviamente, para que se aplique el filtro, tener algún post que tenga la palabra test en el título.


Share on FacebookTweet about this on TwitterShare on LinkedInEmail this to someoneShare on Google+