email telefono contacto

Qué son los hooks o ganchos en WordPress y para qué sirven

Esta semana quería publicar en el blog de Raiola un post sobre cómo crear un plugin desde cero. Sin embargo, para aprender y comprender correctamente cómo desarrollar themes y plugins en WordPress, es MUY IMPORTANTE saber cómo funcionan los hooks o ganchos y cuál es su orden de carga.

Además, ten en cuenta que necesitas tener unos conocimientos básicos sobre PHP. Si no es tu caso, te recomiendo que antes de empezar busques algún tutorial de PHP básico para poder abarcar este tema. Sin más preámbulos… ¡Vamos al lío!

Qué son los hooks o ganchos en WordPress y para qué sirven 1
¡Suscríbete al boletín!

No te enviaremos spam, lo prometemos. Enviamos a nuestros suscriptores contenido sobre WordPress, hosting, marketing digital y programación.

+ Información básica sobre protección de datos

¿Qué son los hooks en WordPress?

WordPress, a diferencia de otros gestores de contenido, utiliza una arquitectura basada en eventos y procedimientos. Si quieres desarrollar tanto temas como plugins en este CMS, es esencial que aprendas a utilizar el sistema de hooks o ganchos.

Los ganchos o hooks en WordPress son puntos concretos y estratégicos dentro del core de WordPress que permiten añadir funcionalidades o modificar un comportamiento. Cuando la secuencia de carga llegue a ese punto concreto, se ejecuta la función que has “enganchado”.

orden carga action hook wordpress

De esta manera, podrás modificar el funcionamiento del código de WordPress sin ni siquiera tocarlo. Sin embargo, tienes que ser consciente de que los hooks no se ejecutan aleatoriamente, sino que siguen un orden. La siguiente imagen pertenece a Rarst.net, concretamente a un artículo que se llama “Make sense of WordPress core load”:

orden carga hooks

Me gusta mucho porque ilustra muy bien parte del orden de carga de una petición típica de WordPress (aunque no está completo, pero no importa). La idea es que entiendas cómo funciona y con esto es suficiente. He marcado con un cuadro rojo los action hooks (un tipo concreto de gancho, ahora te explico) para que puedas ver cómo se van ejecutando desde arriba hasta abajo.

En WordPress existen dos tipos de hooks: acciones (actions hooks) y filtros (filters hooks). Aunque se utilizan de la misma manera, el valor que devuelve cada uno es diferente.

Action hooks o acciones

Las acciones o action hooks ejecutan una función propia en un lugar preciso en un momento determinado de la línea de ejecución de WordPress. Cuando llega a un punto concreto, realiza la acción que quieras además de las que ya se van a ejecutar por defecto. En resumen, los action hooks añaden código adicional a tu WordPress.

Si te fijas en el código que aparece en la primera imagen de este post, todos los hooks se llaman con la función do_action(‘nombre_hook’).

funcion do_action

Así es como puedes localizar en qué puntos de WordPress están los action hooks. Para verlo más claro, te voy a poner un ejemplo sencillo: imagina que necesitas agregar código CSS personalizado dentro de la cabecera de tu web.

En el código de WordPress existe una función que se llama wp_head() que se define en el archivo /wp-includes/general-template.php. Esta función utiliza do_action() para crear un punto con el que puedas trabajar con el gancho wp_head.

Si abres el archivo header.php de tu theme principal, verás que entre las etiquetas <head></head> se llama a la función wp_head().

action hook wp head

Cuando la ejecución de tu WordPress llega a ese punto, el código que realmente ejecuta wp_head(); es do_action(‘wp_head’);, creando así un punto de anclaje justo antes del cierre de la etiqueta <head>. De esta manera, cuando tú enganches tu función al hook wp_head, se añadirá el código CSS que tienes preparado al header.php de tu theme.

Pero la función do_action(); no solo se utiliza en el core de WordPress y esto es MUY INTERESANTE. Por ejemplo, si estás desarrollando un plugin o tema para WordPress puedes “preparar” hooks para que otra persona “enganche” a tu plugin o theme sus funciones personalizadas.

Ahora, lo que me falta por enseñarte es cómo usar un action hook de WordPress. Para “engancharte” a un hook vas a utilizar la función add_action();. Para aprender a usarla, lo primero que debes conocer es la sintaxis o estructura de un action hook:

add_action( string $nombre_accion, callable $nombre_tu_funcion, int $prioridad, int $numero_parametros=1);
  • $nombre_acción (requerido): El nombre de la acción a la que se va a enganchar la función que añadas en $nombre_funcion.
  • $nombre_funcion (requerido): El nombre de la función que creaste para utilizar con este action hook.
  • $prioridad (opcional):  Se especifica el orden en el que se ejecutan las funciones que están asociadas a ese gancho. Su valor por defecto es 10. Cuanto más pequeño es el número, antes se ejecuta esa función. Si el valor es igual entre dos funciones, se ejecutará antes la que se haya agregado primero al action hook.

Qué son los hooks o ganchos en WordPress y para qué sirven 2

  • $numero_parametros (opcional): Un número que indica la cantidad de parámetros que vas a pasar a la función. Por defecto, es 1.

Ahora que conoces la estructura de un action hook, te voy a enseñar cómo es el código que tienes que usar. ¡OJO!, este tipo de experimentos tienes que hacerlos en un entorno de pruebas. No lo hagas nunca sobre tu web hasta que estés al 100% seguro de que va a funcionar y no vas a dejar caída tu página.

Para que veas cuál es el código que hay que poner y cómo se usa, vas a crear un action hook que deshabilite el widget de calendario.

Si no tienes un tema hijo en tu web ni sabes lo que es, te sugiero que le eches un ojo al siguiente artículo: Qué es un tema hijo y cómo crearlo

Primero, edita el archivo functions.php del tema hijo del entorno de pruebas y añade el siguiente código dentro de la etiqueta de apertura y cierre de PHP:

function miprimerafuncion()
{
    //Mi código personalizado
}
add_action(‘[NOMBRE_HOOK]’,’miprimerafuncion’);

En el ejemplo, he nombrado a la función como ‘mi primera funcion’ pero tú la puedes llamar como quieras. Lo único que tienes que tener en cuenta es que en WordPress el nombre de la función tiene que ser exclusivo. No puede llamarse igual que ninguna otra. De lo contrario, tu página podría dejar de funcionar.

Para poder eliminar el widget del panel de control, vas a utilizar un hook de WordPress que se activa justo después de que se hayan registrado todos los widgets: widgets_init. Por lo tanto, deberás cambiar [NOMBRE_HOOK] por widgets_init.

add_action(‘widgets_init’,’miprimerafuncion’);

Ahora solo tienes que añadir el código necesario dentro de tu función. En la documentación oficial de WordPress podrás encontrar una función que realiza la tarea que necesitas: unregister_widget();.

function miprimerafuncion()
{
    unregister_widget(‘WP_Widget_Calendar’);
}

Listo. Como ves en la siguiente imagen, ya no puedes utilizar el widget del calendario.

ejemplo action hook

Si quieres ver todos los action hooks que existen, aprender a utilizarlos y saber en qué orden cargan, te recomiendo que visites la documentación oficial de WordPress sobre Action Hooks.

Filter hooks o filtros

Los filtros o filter hooks de WordPress manipulan la información en un punto concreto de la ejecución antes de que se muestre en la pantalla o se almacene en la base de datos.

Por ejemplo, puedes cambiar el título de una página antes de que salga en la pantalla del usuario, añadir más contenido al título de un post, cambiar el texto de un botón…

Al igual que con los action hooks, te voy a enseñar cuál es la estructura o sintaxis de un filter hook:

add_filter( string $nombre_filtro, callable $nombre_tu_funcion, int $prioridad, int $numero_parametros=1);
  • $nombre_filtro (requerido): El nombre de filtro con el que quieras trabajar.
  • $nombre_funcion (requerido): El nombre de la función que se ejecutará cuando el filtro se active.
  • $prioridad (opcional):  Se especifica el orden en el que se ejecutan las funciones que están asociadas a ese gancho. Su valor por defecto es 10. Cuanto más pequeño es el número, antes se ejecuta esa función. Si el valor es igual entre dos funciones, se ejecutará antes la que se haya agregado primero al action hook.
  • $numero_parametros (opcional): Un número que indica la cantidad de parámetros que vas a pasar a la función. Por defecto, es 1.

Seguro que te resulta muy familiar. Realmente los action hooks y los filter hooks son muy similares y se utilizan de la misma forma aunque se usen para cosas diferentes:

  • Los filter hooks reciben un parámetro de entrada que tú vas a modificar y devolver al hook correspondiente.
  • No se llaman con la función do_action(), como en el caso de los action hooks, se utiliza apply_filters(); por lo que tendrás que localizar en el código de WordPress los puntos en los que puedes engancharte al hook con esta función.
  • No se referencia con add_action(); sino que se usa add_filter();

Abre otra vez el archivo functions.php de tu tema hijo. Te voy a enseñar a cambiar el texto del botón de “Leer más” de un blog. Seguro que muchas veces te has encontrado blogs en español con el botón de Leer más en inglés. Pues la verdad es que se cambia de una manera muy rápida y fácil:

function misegundafuncion($texto)
{
     //El texto de Read More… se va a sustituir por la cadena que devuelvas en esta función
$texto=”Leer más”;   
 return $texto;
}

add_filter(‘except_more’,’misegundafuncion’);

Listo. Como ves en la siguiente imagen, el nombre del botón antes era Read More y ahora pone Leer más.

ejemplo filter hook

Si quieres ver todos los filter hooks que existen y aprender a utilizarlos correctamente, te recomiendo que visites la documentación oficial de WordPress sobre Filter Hooks.

Conclusión

Una vez que te familiarices con los hooks de WordPress, te resultarán más fáciles de usar de lo que pudiera parecerte en un principio. En este artículo apenas te he mostrado cómo se usa cada uno, pero si te interesa este tema y quieres ver más ejemplos de cosas que puedes hacer con los hooks de WordPress, te recomiendo que visites el siguiente artículo: Tweaking Avanzado con snippets en el functions.php de WordPress

¿Te ha gustado el artículo? ¿Tienes alguna duda? Mis compañeros y yo estaremos encantados de responder a tus comentarios 🙂

Ángela Piñeiro
Ángela Piñeiro

Informática, diseñadora y dibujante desde enana. Formo parte del departamento Marketing, co-organizo #RMC y a veces escribo en el blog. Me encanta todo lo relacionado con el desarrollo web y los videojuegos. Soy la compañera de vida de una de las mascotas oficiales de Raiola: la conejita Lana.

Artículos relacionados

Si te ha gustado este post, aquí tienes otros que pueden ser de tu interés. ¡No dejes de aprender!

Tenemos 18 comentarios en "Qué son los hooks o ganchos en WordPress y para qué sirven"
  • Hola Angela, la verdad es que esta muy bueno al articulo tenes mucha didactica para explicar todo.
    Te cuento que si bien soy desarrollador, estoy incursionando en el desarrollo en wordpress y no me queda muy en claro (despues de haber recorrido tu blog xD y varios otros) en el caso por ejemplo.. si desarrolle un plugin.. que muestra una tabla con datos y quiero poder mostrarlo en todos lados donde pueda agregarse dicho plugin, un articulo por ejemplo.. como deberia ser la definicion del add_action no me queda claro el lugar de destino que deberia tener.. desde ya muchas gracias!! Ignacio

    • Hola Ignacio.

      Muchas gracias por tus palabras. Me alegro de que te sea de utilidad. Para hacer lo que comentas, depende un poco cual sea la función que quieres realizar. Puede que necesites una acción o un filtro. Si por ejemplo, programas un plugin que cuando esté activo, añada un texto a todos los title utilizarías un filtro:
      ————————————————————————————————
      function ejemplo( $title ) {
      $contenido_nuevo = ‘El blog de Raiola’; //Contenido adicional que quiero añadir
      $title .= $contenido_nuevo; //Al título que ya existe el añadimos ese contenido adicional
      return $title; //Devolvemos el nuevo contenido del titulo
      }
      add_filter( ‘the_title’, ‘ejemplo’ );
      ————————————————————————————————

      Si por ejemplo, quieres añadir una tabla antes del contenido del blog, debes buscar el filtro correspondiente. Te recomiendo que le eches un ojo al Codex de WordPress. Ahí tienes toda la documentación que necesitas.

      Un saludo 🙂

  • Que artículo mas bueno!
    Me ha sido muy útil, gracias por el tiempo invertido y estaré atento a tus nuevas publicaciones.

    • ¡Hola Francisco!
      Gracias a ti por leerlo y pararte a comentar. Me alegro de que te haya sido de ayuda. 😀 ¡Un saludo!

  • Hola Ángela, soy desarrollador .Net y estoy dando mis primeros pasos en WordPress y estoy en el proceso de adaptación ?. Muy bueno el artículo! Mi pregunta es ¿Cuál es el hook de Woocommerce que tengo que usar para hacer algo justo después de que se confirma un pago exitoso?

  • Angela, muy buen artículo !
    Por fin empiezo a adentrarme en el mundo «WordPress» como programador, y comienzo a comprender sus intrincados caminos !
    Voy a estar atento a todas tus nuevas publicaciones desde hoy.
    Saludos, desde Argentina.
    Muchas gracias por tomarte el tiempo para escribirlos ! 😉

  • Buenas, yo tengo una web donde tengo que estar constantemente agregando el mismo puerto en el archivo http.php ya que al actualizar algunos plugins estos me borran los cambios. Se pueden utilizar hooks para solucionar esto? En caso que se pueda como seria?

    Saludos

  • Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    ¿Vienes de otro proveedor?

    ¡Ningún problema! Te migramos gratis y sin cortes
    cohete raiola