Seleccionar página

Hooks en WordPress – Introducción a Action y Filter

por | Dic 12, 2016 | Wordpress

Índice de contenidos

Hooks en WordPress – Action y Filter

Vamos a explicar brevemente los Hooks en WordPress:

Los hooks son acciones y filtros que nos permiten agregar código propio en determinados puntos del core de WordPress sin modificar el código fuente. Conocer qué son los hooks en WordPress te ayudará a crear o modificar temas y plugins

hooks¿Qué son los hooks en WordPress?

Los hooks en WordPress son puntos concretos donde podemos añadir (anclar o enganchar) nuestro código propio o modificar código existente. De esta forma modificamos el comportamiento de nuestro WordPress sin variar directamente el código fuente original.

Para enganchar funciones propias en estos puntos determinados, creamos funciones de código y usamos las funciones nativas de WordPress add_action y add_filter.

add_action2

Los lugares donde podemos enganchar código, se encuentran marcados en el núcleo WP e indicados con funciones nativas tipo: do_action, apply_filters, apply_filters_ref_array()… 

Tipos de hooks en WordPress

En WordPress existen dos tipos de hooks diferentes: action y filter (acciones y filtros).

1- Action Hooks: se emplea para trabajar con eventos. Cuando se produce un evento en WordPress (cuando se carga el menú de administración, cuando se modifica un post..) WP lanza un aviso indicando que un evento se está produciendo, nuestro código recibe esa notificación y añade una acción dentro del evento. De esta forma, permiten añadir funciones propias o eliminar funciones existentes en puntos concretos durante el tiempo de ejecución de nuestro blog.

Un ejemplo del hook action lo encontrarás en el artículo de este blog:

Añadir menú al administrador de WordPress

2- Filter Hooks: mediante los filter modificamos datos (texto, contenido…) que devuelve una función concreta de WordPress. Las modificaciones se producen antes de guardar el contenido en la base de datos o antes de escribir en pantalla.

Acciones y filtros son parecidos, la diferencia es que los filtros devuelven un valor (en las funciones PHP de filtros siempre aplicarás return) , que es el parámetro que han recibido para modificar.

Trabajando con hooks en WordPress

Action Hook 

Una acción es una función propia (nativa) en PHP que definimos dentro de nuestros plugins, temas o archivos de funciones y que será ejecutada (enganchada) en un punto concreto de la carga de WordPress. 

Se pueden emplear acciones para las siguientes tareas:

  • Modificar datos de la base de datos.
  • Enviar emails.
  • Modificar la pantalla de administración de WordPress.
  • Modificar el front-end de nuestra web…

Estructura de Action

add_action

*Recuerda que los parámetros encerrados en [] son opcionales. En estos ejemplos básicos no los veremos. Si necesitas más información sobre los parámetros de add_action pincha aquí.

Creando una función add_action

1- Creamos nuestra función PHP: ejemplo añadir nuevo menú llamado IMPRESORA en el administrador de WordPress

function menu_impresora() {
	add_menu_page('Menú impresora', 
	'Impresora', 
	'manage_options', 
	'menu_impresora', 
	'funciones_impresora','',3);
}
 

2- Utilizamos la función nativa de WP:  add_action para indicar que cuando se produzca el evento de carga de menús en el administrador de WordPress deseamos añadir un nuevo menú.

add_action('admin_menu', 'menu_impresora');

Si abres el archivo wp-admin/includes/menu.php de tu WordPress verás la siguiente línea de código (#149 aprox):

do_action( 'admin_menu', '' );

que indica que en ese punto de ejecución se puede enganchar una función propia con el hook admin_menu

Filter Hook 

Un filter es una función propia (nativa) en PHP que definimos dentro de nuestros plugins, temas o archivos de funciones y que será ejecutada (enganchada) en un punto concreto de la carga de WordPress. 

Las utilizamos para modificar datos antes de que estos se pinten en pantalla o antes de que se escriban en base de datos. Lo que hacemos es coger un parámetro de datos de una función y añadir o modificar contenido dentro de nuestra función add_filter. Después de realizar los cambios deseados devolvemos el parámetro a la función.

Estructura de Filter

add_filters

*Recuerda que los parámetros encerrados en [] son opcionales. En estos ejemplos básicos no los veremos. Si necesitas más información sobre los parámetros de add_filter pincha aquí.

Creando una función add_filter

1- Creamos nuestra función PHP: esta función añade el nombre de nuestro blog a todos los títulos de los post. Para lograr esto pedimos el parámetro the_title de cada artículo y antes de que se pinte en pantalla añadimos la información: «Blog Lph «

function nuevo_titulo($title) {
    if(!in_the_loop()){
        // si no estamos en el loop no modificamos el título
        return $title;
    }
    // Títulos del post en el loop
    $title = "Blog Lph: ". $title;
    return $title;
}

2- Utilizamos la función nativa de WP:  add_filter para indicar a WordPress que queremos modificar los datos del título de cada post.

add_filter('the_title', 'nuevo_titulo');

Si abres el archivo wp-admin/includes/post-template.php de tu WordPress verás la siguiente línea de código (#158 aprox):

return apply_filters( 'the_title', $title, $id );

que indica que en ese punto de ejecución se puede enganchar una función propia.

Consideraciones sobre los nombres de las funciones

Cuando desarrolles tus funciones PHP estás deben tener un nombre único. Un nombre de función que no haya sido utilizado por WordPress, temas o plugins. Si existen dos funciones con el mismo nombre, el blog podría dejar de funcionar porque PHP no permite que dos funciones tengan el mismo nombre.

Dos formas sencillas de solucionar este problema:

1- Añadir a los nombres de tus funciones un prefijo. Ejemplo: Lph_menu_impresora. 

2- Encapsular la función dentro de una clase. Ejemplo: en este ejemplo cada vez que se modifica un post se envía un email a dos correos definidos.

class email_autores {
  static function enviar($post_ID)  {
    $autoresblog = 'autor1@laprogramaciondehoy.com,editor@laprogramaciondehoy.com';
    mail($autoresblog,"modificaciones blog Lph",'mofificaciones en los post de Lph: https://laprogramaciondehoy.com');
 return $post_ID;
  }
}
add_action('publish_post', array('email_autores', 'enviar'));

Donde escribir el código

No debes separar las funciones que has creado de los hooks action y filters. Tu función creada y la llamada a la función nativa de WordPress add_action o add_filter deben ir juntas en el mismo archivo.

Puedes escribir el código dentro de un plugin o en el archivo functions.php de tu tema o tema hijo.

¿Cómo localizar hooks en WordPress?

Si sumamos las zonas del core de WordPress de temas y de plugins donde puedo agregar hooks la cifra es mayor a mil. La cifra exacta depende de los temas y plugins instalados.

Es fácil deducir que las posibilidades son muchas y para obtener el máximo rendimiento necesitamos conocer:

  • que hooks podemos usar.
  • dónde encontrar cada punto de anclaje.

Si revisas el código de WordPress encontrarás en varios puntos el código: do_action, apply_filters, apply_filters_ref_array()… que indica que se puede inyectar código mediante un hook.

Obviamente esta no es una manera práctica de localizar todos los hooks disponibles. Por suerte hay diferentes herramientas que te ayudarán a localizar los puntos para anclar hooks disponibles en WP, temas y plugins:

>> Herramientas  que  te ayudarán a trabajar con Hooks en WordPress.

Páginas de información imprescindibles

Este artículo muestra información básica.

Encontrarás toda la información en el Codex de WordPress:

0 comentarios

Enviar un comentario

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