Usando Actions y Filters en WordPress

- septiembre 08, 2017

Los Hooks son la columna vertebral de WordPress. Ellos habilitan el desarrollo de plugins por medios externos dentro del area de trabajo de WordPress sin modificar directamente el core. Esto permite a los usuarios realizar mejoras en sus desarrollos sin perderlos al momento de realizar alguna actualización.

WordPress maneja dos tipos de Hooks que son action hooks y filter hooks, los actions permiten ejecutar una función en cierto punto y los filters le permiten modificar ciertas funciones dentro del core, los argumentos utilizados para conectar ambos filtros y acciones son iguales. Pero son diferentes en funcionalidad y cómo se comportan.

A veces se puede lograr el mismo objetivo con una acción o un filtro. Por ejemplo, si desea que su plugin cambie el texto de un anuncio, es posible añadir una función de acción a publish_post (por lo que el mensaje es modificado, ya que se guarda en la base de datos), o una función de filtro para the_content (por lo que el mensaje es modificado como se muestra en la pantalla del navegador).

Detallemos un poco estos dos Hooks que son de gran ayuda en el desarrollo.

Los Actions

Las acciones se activan por eventos específicos que tienen lugar en WordPress, como publicar un post, cambiar temas o mostrar una pantalla de administración. Una Acción es una función personalizada de PHP definida en tu plugin o tema y enganchada, es decir, configurada para responder, a algunos de estos eventos. Las acciones suelen hacer una o más de los siguientes tareas:

  • Modificar los datos de la base de datos.
  • Enviar un mensaje de correo electrónico.
  • Modificar la pantalla de administración generada o la página de inicio enviada a un navegador de usuario.

Que necesitamos para crear nuestro Hook de tipo action:

  • Crear una función PHP que debe ejecutarse cuando se produzca un evento específico de WordPress, en su archivo functions.php o dentro del plugin creado.
  • Enganchar esta función al evento usando la función add_action().

Existen varias funciones para las acciones las cuales pueden utilizarse dependiendo de las necesidades que tendamos de agregar, desactivar, borrar, entre otras y dejaré una pequeña lista por aquí:

  • has_action()
  • add_action()
  • do_action()
  • do_action_ref_array()
  • did_action()
  • remove_action()
  • remove_all_actions()
  • doing_action()

Ejemplo:

Crearemos un action hook que muestre un mensaje en el footer de nuestra página.

Procedemos a crear nuestra función:

/*************** Action Hook ****************/

function footer_mensaje(){

  echo "Copyright &#169 " . the_date('Y') . "<a href='https://andres-dev.com'>ANDRES DEV</a>";

}

Para crear nuestro gancho o hook es necesario respetar la siguiente estructura:

add_action ( 'hook_name', 'your_function_name', [priority], [accepted_args] );

Donde

hook_name: El nombre de un gancho de acción proporcionado por WordPress, que indica qué evento debe asociar su función.

your_function_name: El nombre de la función que desea ejecutar después del evento especificado por hook_name. Esto puede ser una función estándar de php o una función presente en el núcleo de WordPress

priority: Un argumento de número entero opcional utilizado para especificar el orden en el que se ejecutan las funciones asociadas a una determinada acción (valor predeterminado: 10).

accepted_args: Un argumento entero opcional que define cuántos argumentos su función puede aceptar (valor predeterminado 1), útil porque algunos ganchos pueden pasar más de un argumento a su función.

Entonces nuestra función completa quedaría de la siguiente manera:

/*************** Action Hook ****************/

function footer_mensaje(){

  echo "Copyright &#169 " . the_date('Y') . "<a href='https://andres-dev.com'>ANDRES DEV</a>";

}

add_action('wp_footer', 'footer_mensaje' );

En este caso nuestro nombre de acción seria wp_footer el cual agregará lo que está dentro de nuestra función al final de nuestra página.

Mostrando el siguiente mensaje así.

Usando Actions y Filters en WordPress 0

Los Filtros

Los filtros son funciones con las que WordPress pasa los datos, en ciertos momentos de la ejecución, justo antes de tomar alguna acción con los datos (como agregarlos a la base de datos o enviarlos a la pantalla del navegador). Los filtros se sitúan entre la base de datos y el navegador (cuando WordPress genera páginas), y entre el navegador y la base de datos (cuando WordPress agrega nuevos mensajes y comentarios a la base de datos); la mayoría de la entrada y salida en WordPress pasa a través de al menos un filtro. WordPress hace un cierto filtrado por defecto, y su plugin puede agregar su propio filtrado.

Que necesitamos para crear nuestro Hook de tipo filter:

  • Crear una función PHP que filtre los datos.
  • Enganchar el filtro en WordPress, llamando add_filter().

Una función de filtro toma como entrada los datos no modificados y devuelve datos modificados (o en algunos casos, un valor nulo para indicar que los datos deben ser borrados o ignorados). Si los datos no son modificados por su filtro, los datos originales deben ser devueltos para que los complementos subsiguientes puedan continuar modificando el valor si es necesario.

Existen varias funciones para los filtros las cuales pueden utilizarse dependiendo de las necesidades que tendamos de agregar, desactivar, borrar, entre otras y dejaré una pequeña lista por aquí:

  • has_filter()
  • add_filter()
  • apply_filters()
  • apply_filters_ref_array()
  • current_filter()
  • remove_filter()
  • remove_all_filters()
  • doing_filter()

Ejemplo:

Crearemos un filter hook que modificara nuestro the_title dentro de cada post y le adiciona el título de nuestra página.

Procedemos a crear nuestra función:

/*************** Filter Hook ****************/

function filter_titulo($title) {
    // Consultamos si no estamos dentro del Loop
    if(!in_the_loop()){
    
        return $title;
    }
    // Si estamos dentro del Loop
    $title = bloginfo('name' ) .' - '.  $title;
    return $title ;
}

Para crear nuestro gancho o hook es necesario respetar la siguiente estructura:

add_filter ( 'hook_name', 'your_filter', [priority], [accepted_args] )

El cual los valores a definir son muy parecidos a los del action.

Entonces nuestra función completa quedaría de la siguiente manera:

/*************** Filter Hook ****************/

function filter_titulo($title) {
    // Consultamos si no estamos dentro del Loop
    if(!in_the_loop()){
    
        return $title;
    }
    // Si estamos dentro del Loop
    $title = bloginfo('name' ) .' - '.  $title;
    return $title ;
}

add_filter('the_title', 'filter_titulo');
Usando Actions y Filters en WordPress 1

Y de esta forma podemos crear actions y filters para ampliar las funcionalidades de nuestro WP.

Tags , , ,

Recibirás cada semana todas nuestras actualizaciones
Puedes estar tranquilo que nunca te enviaremos SPAM
SOBRE EL AUTOR

Desarrollador web (Wordpress Expert) PHP, HTML5, CSS3, LINUX y muchos más…

¿Tienes un proyecto en mente? Hagámoslo real

CONTACTAR
Ebook-eBook – Funciones más Útiles para WordPress

Descarga el eBook GRATIS!

eBook – Funciones más Útiles para WordPress