Ha llegado la hora de hablar de un tema muy importante para que comprendas el desarrollo de plugins y temas WordPress.
Me refiero a los HOOKS. Los hooks de WordPress podemos decir que son una especie de lugares o momentos donde pasa algo.
Por ejemplo puedes poner unos botones de compartir en redes sociales en un hook de tu tema para que se visualice en todas las entradas de tu blog. Imagínate que tienes 5000 entradas, sería un coñazo tener que ir post por post agregando los botones. Bueno, pues para eso y muchísimas cosas más sirven los hooks de WordPress.
Los hooks son imprescindibles para los desarrolladores a la hora de crear plugins y temas. Se utilizan para agregar código a WordPress sin la necesidad de modificar su core.
Existen dos tipos de hooks: actions y filters.
A partir de ahora me referiré a ellos como (acciones y filtros).
Para que te hagas una idea podemos decir que la acción, como su nombre indica, hace una nueva acción en un hook mientras que el filtro coge una acción que ya está hecha en un hook, la modifica y devuelve el resultado.
Los filtros necesitan devolver siempre un valor mientras que las acciones no.
Comprender los hooks no es tan fácil cuando estás empezando en este mundillo, en parte porque los términos en sí mismos son bastante difíciles de visualizar y distinguir entre sí.
Acciones y Filtros (Actions & Filters)
Las acciones y los filtros son funciones personalizadas de código php. Se «enganchan» en hooks de acción y hooks de filtro.
- Un hook es un lugar en el código de WordPress al que se le pueden agregar funciones. Utilizando una función en un hook puedes agregar una funcionalidad adicional en esa ubicación o modificar alguna existente.
- Existen dos tipos de hooks: acciones y filtros . Los filtros modifican la salida existente, mientras que las acciones pueden realizar cualquier tipo de funcionalidad personalizada.
Lo he repetido todo un par de veces porque es necesario que te quede claro esto desde el principio. Yo cuando empecé a formarme sobre WordPress me costó algo de tiempo tener claro los conceptos de hooks, acciones y filtros.
Vamos a ver un ejemplo de acción:
function register_my_custom_menu_page() { add_menu_page( 'custom menu title', 'custom menu', 'manage_options', 'myplugin/myplugin-admin.php', '', 'dashicons-admin-site', 6 ); } add_action( 'admin_menu', 'register_my_custom_menu_page' );
Puedes ver que la función register_my_custom_menu_page
está ejecutando código en el hook admin_menu
. Esto te permite ejecutar código cuando se genera el menú de administración.
Veamos un ejemplo de filtro:
function excerpt_length_example ($words) { return 15; } add_filter ('excerpt_length', 'excerpt_length_example');
En este ejemplo, estamos usando el hook de filtro excerpt_length
que nos proporciona un número entero que determina la longitud usada con the_excerpt ()
.
Hablando claro, en este caso le estamos diciendo a WordPress que modifique la cantidad de palabras del extracto a 15. Da igual que antes el extracto mostrase 50 palabras, a partir de ahora gracias al hook de filtro el extracto se ha modificado y mostrará 15 palabras.
Vamos a ver el último ejemplo:
function create_my_widget() { register_sidebar(array( 'name' => __( 'My Sidebar', 'mytheme' ), 'id' => 'my_sidebar', 'description' => __( 'The one and only', 'mytheme' ), )); } add_action( 'widgets_init', 'create_my_widget' );
Crear una nueva zona de widgets es una acción muy simple y común en el desarrollo de cualquier plugin o tema de WordPress.
El ejemplo tiene la función create_my_widget()
que registra una nueva zona de widgets en tu WordPress cuando el hook widgets_init
se ejecute. Este hook se ejecuta después de que se hayan registrado todos los widgets predeterminados de WordPress.
¿Cuántos hooks de WordPress existen?
La cantidad de hooks de WordPress tanto de acciones como de filtros es una pasada. Son miles de hooks disponibles para personalizar tu WordPress.
Y eso solo sería los hooks de WordPress ya que cada plugin o tema tiene también sus propios hooks.
No hace falta ni decir que es imposible memorizarlos todos.
¿Cómo podemos saber qué hook usar?
Hay una página web muy buena para esto. Se llama hookr.io y allí encontrarás información sobre todos los hooks de WordPress y algunos temas y plugins.
WooCommerce, BuddyPress, Gravity Forms, Advanced custom fields y Paid Memberships PRO son algunos de los plugins que encontrarás en esta web. La web tiene un buscador que funciona muy bien y en muchas ocasiones sólo buscando con un poco de sentido común, encontraremos el hook que necesitamos, y encima nos dirá en qué archivo y linea lo podemos encontrar.
Esta página web también tiene un plugin para WordPress que te ayudará a localizar los hooks. Una vez instalado y activo podrás visualizar todos los hooks desde tu página web.
Imaginémonos que queremos registrar un nuevo widget. El sentido común nos dice que pongamos en el buscador de hooks ‘widget’ para ver que opciones tenemos para los widgets. Bien, al hacer la búsqueda nos saldrán varios resultados. Si aún estamos empezando tendremos que ir leyendo la información de los diferentes hooks para saber cuál es el que nos interesa utilizar.
En este caso, vamos a echarle un vistazo al hook register_widget
para ver que información nos da y si se adapta a lo que necesitamos.
Si hacemos clic y nos metemos dentro para ver la información veremos:
- Una pequeña descripción sobre la funcionalidad del hook.
- Los parámetros que acepta.
- El uso que se le daría.
- Donde está definido en WordPress. (Ubicación).
¿Cómo se crea un hook de acción?
Para agregar un hook de acción debes hacerlo con la función add_action ()
.
add_action ( 'nombre del hook' , 'nombre de tu función' , ' prioridad ' );
Los hooks usan una escala de prioridad para funcionar correctamente. Esta escala es un valor ordinal automático basado en una escala de 1 a 999. Define el orden de precedencia para las funciones asociadas con ese hook en particular.
Un valor de prioridad más bajo significa que la función se ejecutará antes mientras que el más alto se ejecutará más tarde. El valor predeterminado de la escala de prioridad es 10.
¿Cómo se crea un hook de filtro?
Puedes crear un hook de filtro utilizando la función add_filter ()
. El hook de filtro se utiliza para modificar, filtrar o reemplazar un valor por otro nuevo.
function filtrar_algo( $ejemplo ) { // Modificamos la variable $ejemplo de alguna manera. return $ejemplo; } add_filter( 'hook de filtro', 'filtrar_algo' );
Eliminar acciones y filtros
Puedes usar remove_action ()
y remove_filter ()
para excluir determinadas acciones o filtros respectivamente.
Por ejemplo, puedes modificar un plugin que tenga demasiados hooks innecesarios que podrían interrumpir la optimización de tu sitio.
add_action ( 'wp_print_footer_scripts' , 'custom_footer_scripts_theme' , 11 ) ; function custom_footer_scripts_theme () { // aquí definimos el código de la función custom_footer_scripts_theme () } remove_action ( 'wp_print_footer_scripts' , 'custom_footer_scripts_theme' , 11 ) ;
En el ejemplo anterior vemos que se ha creado la función custom_footer_scripts_theme ()
y se le ha hecho una acción en el hook wp_print_footer_scripts
.
Luego utilizando remove_action ()
hemos eliminado esa función de ese hook.
Conclusión
La función de los hooks en WordPress es fundamental para la creación de plugins y temas. Gracias a ellos podemos agregar código personalizado o modificar alguno ya existente sin la necesidad de tener que modificar los archivos del core de WordPress.
Por lo general se utiliza el template functions.php
para agregar el código con las acciones y filtros. Si no sabes que es el functions.php
, aqui te dejo una explicación.
Aunque es imposible aprendérselos todos de memoria, existen hooks para casi todo. Utiliza hookr.io o su plugin para conocer los hooks.
Nos vemos en el siguiente tutorial.
Un saludo.