
¿Qué son los Hooks de WordPress?
¿Te imaginas que puedas hacer cambios en la funcionalidad de WordPress sin modificar sus archivos fuente?, pues eso es precisamente los que nos permiten los Hooks. La palabra Hook se puede traducir como gancho, la idea es «enganchar nuestro código adicional» en los ganchos que están disponibles a lo largo de todo el código WordPress, y evitar hacer modificaciones a sus archivos directamente.
Usar tu código adicional a través de Hooks te permite conservar las modificaciones que realices luego de una actualización de WordPress.
Tipos de Hooks
Existen dos tipos de Hooks, las acciones y los filtros, ambos son muy parecidos en su estructura y forma de usarlos, sin embargo difieren en el valor que retornan.
Action Hooks
Las acciones te permiten agregar funcionalidad, ejecutando tus propias funciones en un determinado punto, por ejemplo llegado a un punto:
- Insertar scripts
- Mostrar un formulario
- Validar un usuario
- Imprimir un mensaje, etc
Como ves, si encuentras un punto en donde puedas trabajar con un Action Hook, no estás restringido a devolver algún tipo de valor particular.
En los archivos de WordPress para localizar en donde puedes insertar un Action Hook debes buscar la función do_action(), luego, puedes hacer referencia a tu código a través de una función llamada add_action, tal como se ve en la siguiente imagen:
Sintaxis de add_action
add_action( string $hook, callable $tu_funcion, int $prioridad = 10, int $args = 1 )
Como ves, los parámetros requeridos son los dos primeros, el nombre del hook y el nombre de tu función, los otros dos parámetros son opcionales, indican la prioridad de ejecución y la cantidad de argumentos pasados a la función.
Filter Hooks
Los filtros, al igual que las acciones, nos permiten ejecutar una función personalizada en un determinado punto, sin embargo la función que usemos tendrá un parámetro de entrada, dentro de nuestra función haremos modificaciones al parámetro y finalmente volveremos a retornar el parámetro.
Algunos valores devueltos por los filtros son por ejemplo:
- Cadenas de texto
- Arrays
En los archivos de WordPress para localizar en donde puedes insertar un Filter Hook debes buscar la función apply_filters(), luego, puedes hacer referencia a tu código a través de una función llamada add_filter, tal como se ve en la siguiente imagen:
Sintaxis de add_filter
add_filter( string $hook, callable $tu_funcion, int $prioridad = 10, int $args = 1 )
Al igual que una acción, en el caso de un filtro los parámetros requeridos son los dos primeros, el nombre del hook y el nombre de tu función, los otros dos parámetros son opcionales.
Para usar un filtro, al construir tu función, tendrás al menos un parámetro de entrada por defecto, el cual deberás devolverlo luego de modificarlo.
Usando Hooks
En el siguiente ejemplo aprenderás cómo reemplazar el título de una entrada, lo podrás hacer usando tanto acciones como filtros.
Usando Acciones
add_action( 'the_post', 'dcms_cambiar_objeto_post' );
function dcms_cambiar_objeto_post( $post_object ) {
// print_r($post_object);
$post_object->post_title = str_replace('Hola', 'Hi', $post_object->post_title);
}
En el código anterior:
- Usamos el Action Hook the_post que hace referencia a la función dcms_cambiar_objeto_post
- La función dcms_cambiar_objeto_post por defecto tiene un parámetro que es el objeto post
- Podemos ver toda lo que contiene el objeto con la función print_r
- En el ejemplo estamos cambiando el título, si encuentra el texto «Hola» lo cambia por «Hi»
- No necesitamos retornar ningún valor porque el objeto se pasa por referencia
Usando Filtros
add_filter( 'the_title', 'dcms_filtro_titulo' );
function dcms_filtro_titulo( $titulo ) {
$titulo = str_replace('Hola', 'Hi', $titulo);
return $titulo;
}
En el código anterior:
- Usamos el Filter Hook the_title que hace referencia a la función dcms_filtro_titulo
- La función acepta el texto del título como parámetro por defecto
- Cambiamos la variable $titulo, si encuentra el texto «Hola» lo cambia por «Hi»
- Finalmente es necesario retornar el valor de la variable $titulo
¿Cómo localizar Hooks?
Una forma para localizar los Hooks que quieres modificar es navegando en el código fuente de WordPress, sin embargo otra opción es usar un sitio web como Hookr que te ofrece un índice de los hooks disponibles de acuerdo a la funcionalidad.