¿Qué son los Hooks de WordPress?
Son un término genérico para referirnos a un evento que sucede en WordPress donde nosotros podemos agregar nuestro propio código o modificar lo que WordPress hace por defecto. Existen dos tipos de Hooks en WordPress, Actions y Filters.
Actions
Es un Hook que se dispara en un punto determinado durante la ejecución de WordPress y nos permite hacer algo en ese momento.
Por ejemplo en el Hook wp_enqueue_scripts
es donde nosotros aprovechamos para cargar los estilos y scripts de nuestro sitio.
Listado de los Action Hooks nativos de WordPress.
Filters
Es un Hook que nos permite manipular y siempre retornar un valor.
Por ejemplo cuando necesitamos establecer la longitud para el excerpt de un post lo hacemos con el filtro excerpt_length
.
Listado de los Filter Hooks nativos de WordPress.
Funciones para Filter Hooks
add_filter()
<?php add_filter( $tag, $function_to_add, $priority, $accepted_args ); ?>
Esta función nos permite agregar nuestra propia función para un Filter Hook.
<?php
function custom_excerpt_length( $length ) {
return 20;
}
add_filter( 'excerpt_length', 'custom_excerpt_length', 999 );
En este ejemplo atamos la función custom_excerpt_length
en el Filter Hook excerpt_length
para retornar el valor 20. Este valor está siendo utilizado por WordPress de la siguiente manera para establecer la longitud del excerpt de un post.
/wphooks.dev/wp-includes/formatting.php:
2813 * @param int $number The number of words. Default 55.
2814 */
2815: $excerpt_length = apply_filters( 'excerpt_length', 55 );
2816 /**
2817 * Filter the string in the "more" link displayed after a trimmed excerpt.
1 match in 1 file
WordPress por default le está pasando un valor de 55 al filtro excerpt_length
. Si nosotros no hacemos nada en ese filtro por default la longitud será 55.
apply_filters()
<?php apply_filters( $tag, $value, $var ... ); ?>
Esta función permite modificar un valor que pasa a través de un filtro. Ejemplo:
Pepito pasa a través del filtro rocks_filter
<?php
echo apply_filters( 'rocks_filter', 'Pepito' );
Si no existe el filtro aún, el valor que se imprime es simplemente Pepito. Si lo dejamos así quiere decir que le estamos dando la oportunidad a otros desarrolladores de implementar su propio filtro con add_filter()
para modificar este valor.
<?php
function rocks_callback( $name ) {
return "$name Rocks!!!";
}
add_filter( 'rocks_filter', 'rocks_callback' );
echo apply_filters( 'rocks_filter', 'Pepito' );
Cuando implementamos el filtro rocks_filter
el valor que se imprime es Pepito Rocks!!!.
Es importante que cuando tu veas apply_filters( ‘filter_name’, array(‘color’ => ‘#333333’) );
te fijes en los argumentos que están pasando por ese filtro y los recibas de esa manera cuando estás creando tu filtro con add_filter()
.
remove_filter()
<?php remove_filter( $tag, $function_to_remove, $priority ); ?>
Quita una función que está atada a un Filter Hook:
<?php
remove_filter( 'the_content', 'do_shortcode', 11);
Funciones para Action Hooks
add_action()
<?php add_action( $hook, $function_to_add, $priority, $accepted_args ); ?>
Permite ejecutar una función que atamos a un Action Hook. Por ejemplo cuando cargamos los estilos que utiliza un theme:
<?php
function theme_styles() {
wp_enqueue_style( 'google_fonts', 'https://fonts.googleapis.com/css?family=Open+Sans' );
}
add_action( 'wp_enqueue_scripts', 'theme_styles' );
remove_action()
<?php remove_action( $tag, $function_to_remove, $priority ); ?>
Quita una función que está atada a un Action Hook.
<?php
remove_action( 'wp_enqueue_scripts', 'theme_styles' );
do_action()
<?php do_action( $tag, $arg ); ?>
Ejecuta una función que está atada a un Action Hook:
<?php
function cool_dump_array_callback( $arr ) {
echo '<pre>';
print_r( $arr );
echo '</pre>';
}
add_action( 'cool_dump_array', 'cool_dump_array_callback' );
do_action( 'cool_dump_array', array( 'name' => 'montalvo', 'lastname' => 'miguelo' ) );
Con add_action()
podemos dar la opción a otros desarrolladores de implementar su propia acción de manera similar como hacemos con apply_filters()
.