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().