Qué son los hooks
Los hooks son un concepto de WordPress mediante el cual podemos incluir nuestras propias funciones en partes del código en principio no editables para cambiar su comportamiento.
Básicamente son llamadas a funciones en cierto momento de la ejecución de WordPress. Si hace un tiempo decía que el bucle era la base de las plantillas, los hooks lo son para el funcionamiento de nuestro sitio. Antes de modificar plugins de WordPress con hooks, debemos atender a los dos tipos de hooks que existen:
1) Las acciones permiten añadir y cambiar la funcionalidad de una parte del código y se llaman mediante add_action ($hook, $funcion_a_anadir, $prioridad, $argumentos)
2) Los filtros nos permiten modificar el contenido antes de mostrarlo. Se llaman de forma muy parecida a las acciones, mediante add_filter ($hook, $funcion_a_anadir, $prioridad, $argumentos)
Veamos cómo modificar plugins de WordPress con hooks y los argumentos que se pasan al añadir un hook.
$hook
La etiqueta del hook indica la parte del código donde vamos a llamar a la función. WordPress establece muchísimos lugares donde incluir nuestras propias funciones.
$funcion_a_anadir
Indica el código que queremos incluir en la llamada al hook.
$prioridad
La prioridad se refiere al orden de ejecución de las distintas funciones que se ejecutan en un mismo hook. Un número menor indica una mayor prioridad (por defecto es 10).
$argumentos
Número de argumentos que acepta la función, por defecto 1.
Además de utilizar los hooks de WordPress, podemos añadir hooks a nuestro código con do_actionm($hook, $argumentos). Esto nos permite, por ejemplo, modificar el funcionamiento de un plugin sin editar el código original.
Modificar plugins de WordPress con hooks
Supongamos que queremos modificar la siguiente función de Woocommerce que carga una plantilla:
- /* includes/wc-template-functions.php */
- function woocommerce_output_content_wrapper_end() {
- wc_get_template( 'global/wrapper-end.php' );
- }
Esta función se llama con un hook…
- /* includes/wc-template-hooks.php */
- add_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );
que se ha declarado previamente.
- /* templates/archive-product.php y templates/single-product.php */
- do_action( 'woocommerce_after_main_content' );
Cambiar el hook es tan sencillo como eliminar esa acción desde el archivo functions.php de nuestro tema (o tema hijo) o desde un pequeño plugin que creemos…
- remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10);
Y añadir la nueva acción que llama a la función que hemos creado:
- add_action('woocommerce_before_main_content', 'nueva_funcion', 10);
Acabamos de cambiar la funcionalidad de Woocommerce sin editarlo. Esta es una forma segura de modificar plugins de WordPress con hooks, para aplicar cambios en un plugin de terceros de forma que no perdamos los cambios cuando haya una actualización disponible.