En esta entrada te vamos a dar toda la información que necesitas conocer para saber que son los hooks (ganchos) en WordPress y para que sirven.
Igual que otras plataformas como por ejemplo PrestaShop, WordPress también hace uso de los hooks para trabajar.

¿Que són los hooks en WordPress?

Entender que son los hooks y como funcionan es esencial si quieres programar con WordPress.
Los hooks son lugares estratégicos situados en el core de WordPress que nos permiten añadir nuestro propio código para añadir o modificar funcionalidades.
Los hooks de WordPress se ejecutan siguiendo un orden y tu lo único que tienes que hacer es añadir tu código en el lugar que necesites y con la prioridad necesaria.
Para hacerte una idea, adjunto una imagen extraída de «rarst.net» que representa el ciclo de ejecución de WordPress de una manera rápida.

Ciclo de carga WordPress

En la anterior imagen puedes ver las distintas etapas de una petición de WordPress y los distintos «Action hooks» que se van llamando a través de la función «do_action()«.
A modo resumen, si cogemos la parte del Front Office, el proceso que sigue la petición es: se carga el fichero «index.php» (situado en la raíz del proyecto), a continuación se declara WP_USE_THEMES y se incluye el fichero «wp-blog-header.php», acto seguido se carga el fichero «wp-load.php», luego «wp-config.php» y finalmente «wp-settings.php».
Si quieres saber más en detalle el listado completo de hooks y su orden de carga en una petición estándar estas de suerte, a continuación te los voy a listar :).

muplugins_loaded –> Donde se cargan los must use plugins, es decir los plugins de nivel superior que podemos utilizar para darles prioridad.

registered_taxonomy –> Se registran las taxonomías como categorías o etiquetas.

registered_post_type –> Se registran los tipos de contenido de páginas o entradas.

plugins_loaded –> Se ejecuta cuando se cargan los plugins activos de tu web.

sanitize_comment_cookies –> Se ejecuta en el momento en el que se «sanitizan» las cookies relacionadas con los comentarios.

setup_theme –> Se ejecuta antes de la carga del tema activo.

load_textdomain –> Carga el sistema de localización de idiomas.

after_setup_theme –> Inicializa las opciones y ajustes del tema activo. Se usa para hacer llamadas justo después de cargar el fichero «functions.php» del tema.

auth_cookie_malformed –> Se ejecuta únicamente si no existe una cookie de identificación correctamente creada.

auth_cookie_valid –> Hook de validación de las cookies de autenticación.

set_current_user –> Carga los datos referentes al usuario autenticado.

init –> Inicializa las funciones de los plugins.

widgets_init –> Registra nuevas barras laterales.

register_sidebar –> Hook para registrar las barras laterales en las diferentes secciones de la web.

wp_register_sidebar_widget –> Registra los widgets de las barras laterales.

wp_default_scripts –> Donde se ejecutan los scripts JS.

wp_default_styles –> Donde se ejecutan los estilos CSS.

admin_bar_init –> Inicializa la barra de administración.

add_admin_bar_menus –> Carga los elementos de la barra de administración.

wp_loaded –> Se ejecuta una vez finalizada toda la carga de todos los elementos del núcleo de WordPress.

parse_request –> Donde se hace la petición que afecta a la query principal de WordPress.

send_headers –> Hook donde se añaden nuevas cabeceras a la salida de HTTP.

parse_query –> Se ejecuta una vez «parseadas» las variables de la query principal.

pre_get_posts –> Este hook se ejecuta después de que se haya creado el objeto de la variable de la consulta pero antes de ejecutar la consulta.

posts_selection –> Hook que se utiliza para plugins de almacenamiento en caché.

wp –> Se carga después de que el entorno de WordPress se haya desplegado.

template_redirect –> Se ejecuta antes de indicar que tipo de plantilla cargar.

get_header –> Carga la plantilla de la cabecera.

wp_enqueue_scripts –> Se utiliza para poner en cola los scripts y estilos CSS.

wp_head –> Hook que imprime los scripts y los contenidos de la etiqueta head.

wp_print_styles –> Hook que se ejecuta antes de imprimir los estilos.

wp_print_scripts –> Hook que se ejecuta antes de imprimir los scripts.

get_search_form –> Donde se obtiene el formulario de búsqueda.

loop_start –> Hook donde empieza el loop de WordPress.

the_post –> Se inicia una vez la información del post se ha instalado.

get_sidebar –> Consulta la existencia de las barras laterales o sidebar definidos durante la instalación.

dynamic_sidebar –> Donde empieza la ejecución de los elementos de la barra lateral.

get_search_form –> Hook donde se carga el formulario de búsqueda.

pre_get_comments –> Array que contiene todos los comentarios.

wp_meta –> Se utiliza como «lanzador» del contenido en la barra lateral.

get_footer –> Hook donde se carga el contenido del pie de página.

get_sidebar –> En este hook se carga la barra lateral en el pie de página.

wp_footer –> Donde se carga la base de WordPress para el pie de página.

wp_print_footer_scripts –> Se imprimen los scripts del pie de página.

admin_bar_menu –> Array de referencia de la barra de administración.

wp_before_admin_bar_render –> Se ejecuta antes del renderizado de la barra de administración.

wp_after_admin_bar_render –> Se ejecuta después del renderizado de la barra de administración.

shutdown –> Cuando la ejecución de PHP llega al final.

En WordPress nos podemos encontrar con dos tipos de hooks:
  • Los action hooks.
  • Los filter hooks.

A continuación, en esta entrada sobre que son los hooks (ganchos) en WordPress y para que sirven, te vamos a detallar sus funcionalidades, como usarlos y te pondremos algún ejemplo para que te quede todo más claro.

Action hooks

Las actions te permiten añadir funcionalidades personalizadas, nuevas y propias en un lugar en concreto de WordPress a partir de tu propio código.
Para llamar a un Action hook el código necesario es el siguiente:
add_action($hook, $function, $priority, $parameters_number)
Analizando el anterior código te encuentras con una función y cuatro parámetros (dos obligatorios y dos opcionales):
add_action() -> Función de WordPress que se utiliza para llamar a una acción en un gancho.
$hook (Tipo string) (Obligatorio) -> Este parámetro corresponde al nombre del gancho donde quieres introducir una nueva acción.
$function (Tipo callable) (Obligatorio) -> Este parámetro es el nombre de la función que se va a ejecutar cuando WordPress llame a todas las funciones de este hook.
$priority (Tipo int) (Opcional) -> Este parámetro sirve para especificar en que orden se van a ejecutar las funciones que hay asociadas a un hook. Cuanto más pequeño sea este parámetro antes se ejecutará la función. Si este valor es el mismo para dos funciones del mismo hook, se ejecutará la que se haya agregado primero en el hook. Su valor por defecto es 10.
$parameters_number (Tipo int) (Opcional) -> Este parámetro sirve para indicar cuantos parámetros le vas a enviar a la función. Su valor por defecto es 1.
Para hacerte una idea, si tuviéramos los siguientes actions que llaman a un mismo hook:
add_action(‘hook_name’, ‘function1’, 1);
add_action(‘hook_name’, ‘function2’, 10);
add_action(‘hook_name’, ‘function3’, 7);
add_action(‘hook_name’, ‘function4’, 3);
add_action(‘hook_name’, ‘function5’, 6);
Su orden de ejecución sería:
function1 -> function4 -> function5 -> function3 -> function2

Ejemplo add_action()

// Primero defines tu función
function yourCustomFunction() {
    
}

// A continuación ya la puedes añadir en el hook que necesitems
add_action('name_hook', 'yourCustomFunction');
Como puedes ver, los pasos a realizar son muy simples: abres el fichero «functions.php» del tema en el que estas trabajando o el fichero que necesites, añades la función que quieres crear y a continuación añades la función al hook que necesites. ¿Fácil no?
(Recuerda que también puedes añadir una prioridad si quieres que se ejecute antes o más tarde).

A parte de añadir o modificar código en los hooks, también es muy interesante saber como WordPress los llama. De este modo puedes ver rápidamente todos los hooks que existen, donde se ejecutan y también puedes crear nuevos si estas haciendo un tema o plugin para que otras personas puedan añadir su propio código en él.

El código que se utiliza es:

do_action();

Por ejemplo, si miras el código de tu página web, podrás ver que entre las etiquetas < head > se llama a la función «wp_head()» y si miras esta función, podrás ver como llama al «do_action(‘wp_head’)«. En resumen, se esta llamando al hook «wp_head» el cuál va a añadir los javascripts y CSS en la cabecera de tu página web.

Filter hooks

Los Filter hooks se utilizan para manipular la información antes de que esta se muestre por pantalla o se guarde en la base de datos.

En resumen, se utilizan por si quieres modificar el texto de un botón, el título de un post…

El código para llamar a un Filter hook es el siguiente:
add_filter($name_filter, $name_function, $priority, $parameters_number)
Analizando el anterior código te encuentras con una función y cuatro parámetros (dos obligatorios y dos opcionales):
add_filter() -> Función de WordPress que se utiliza para modificar un determinado contenido.
$name_filter (Tipo string) (Obligatorio) -> Este parámetro corresponde al nombre del filtro con el que vas a trabajar.
$name_function (Tipo callable) (Obligatorio) -> Este parámetro es el nombre de la función que se va a ejecutar cuando WordPress ejecute a este filtro.
$priority (Tipo int) (Opcional) -> Este parámetro sirve para especificar en que orden se van a ejecutar las funciones que hay asociadas a un hook. Cuanto más pequeño sea este parámetro antes se ejecutará la función. Si este valor es el mismo para dos funciones del mismo hook, se ejecutará la que se haya agregado primero en el hook. Su valor por defecto es 10.
$parameters_number (Tipo int) (Opcional) -> Este parámetro sirve para indicar cuantos parámetros le vas a enviar a la función. Su valor por defecto es 1.

Aunque la estructura respecto los «Action hooks» no es muy distinta, obviamente sus funcionalidades son diferentes y utilizan otras funciones. Por ejemplo:

  • Los «Filter hooks» en vez de ser definidos con la función «do_action()» se hace con la función «apply_filters()«.
  • En vez de llamarlos con la función «add_action()» se hace con la función «add_filter()«.

Un ejemplo muy común que te puedes encontrar por otras páginas de Internet (aunque es un tema que acostumbra a dar problemas a los que empiezan), es cambiar el texto «Read more» de las entradas de un blog por «Leer más». Si lo quieres hacer sin hacer uso de plugins de traducciones, lo puedes hacer de una manera muy rápida y fácil gracias a estos hooks.

// Función que va a devolver el nuevo texto para el botón 
function changeButtonText() {
    $txt = "Leer más";
    return $txt;
}

// Haces referencia al filter hook "except_more" para modificar su contenido con el texto que devuelva tu función
add_filter('except_more', 'changeButtonText');

Y hasta aquí llega toda la información sobre que son los hooks (ganchos) en WordPress y para que sirven. Espero que esta entrada te haya servido de ayuda y cualquier duda o aportación no dudes en dejar tu comentario :).