Hooks, filtros y acciones para principiantes en WordPress

Hooks, filtros y acciones para principiantes en WordPress

Wordpress

Los Hooks (ganchos en español) son una funcionalidad existente en WordPress, aunque también en otros sistemas como Prestashop.

Debes conocerlos, ya que aportan muchas posibilidades a los desarrolladores, además de establecer una forma de modificar o extender la funcionalidad de este cMS de una forma estándar.

¿Qué son los Hooks de WordPress?

Los Hooks de WordPress se utilizan para permitir que un fragmento de código pueda interactuar o modificar otra parte de código.

Es decir, un plugin puede modificar otro fragmento de código que ejecute WordPress o el funcionamiento de otro plugin. WordPress también hace un uso extensivo de Hooks para modificar su propio código.

Para hacer uso de un Hook, será necesario conocer el «evento», definir una función de callback que se ejecutará en ese momento y si lo necesitamos, establecer un nivel de prioridad. Esto último es debido a que múltiples plugins pueden utilizar un mismo evento para interactuar.

Los Hooks de WordPress nos permiten asignar a cada callback un número de prioridad (el valor predeterminado si no se añade una prioridad es 10). Por lo tanto, las callbacks añadidas a un gancho con una prioridad de 30 se ejecutarán después de las añadidas con una prioridad de 10.

¿Cuáles son los distintos tipos de Hooks?

Hay dos tipos de Hook en WordPress, acciones y filtros. Son muy similares, pero se comportan de una manera diferente.

La mayor diferencia entre acciones y filtros, y lo importante a recordar como desarrollador, es que con los filtros, las llamadas de retorno siempre deben devolver los datos que se pueden filtrar como una variable.

Las llamadas de retorno asociadas a una acción no necesitan devolver nada.

Resumido:
Acciones: no necesitan retornar nada
Filtros: necesitan retornar los datos que se pueden filtrar como una variable

Hooks de tipo acción (action hooks)

Las acciones en WordPress permiten añadir datos o cambiar la forma en que funciona el código extensible de WordPress o de otros.

Cualquier callback añadida a una acción se ejecuta en un punto específico durante la carga de WordPress.

Ejemplo

function ada_login_message() {
	echo '<p style="text-align:center;">Custom message by ada_login_message</p>';
}
add_action( 'login_footer', 'ada_login_message' );

En el ejemplo anterior, mostraremos un mensaje personalizado en el formulario del login, concretamente en la parte del footer.

Podemos observar en esta captura, el mensaje de nuestro Hook en la parte inferior.

Hooks de tipo filtro (filter hooks)

Los filtros en WordPress son para cambiar datos durante la ejecución del CMS.

Una llamada de retorno conectada con un filtro aceptará datos en forma de variable, hará algunos cambios a esos datos, y luego devolverá la variable. Esto funciona así para que otras llamadas de retorno conectadas al filtro también puedan usarla

Las llamadas de retorno añadidas a los filtros modificarán los datos que proporciona el Hook, tales como modificar los argumentos de una consulta o cambiar el valor de una cadena.

Ejemplo

function ada_hide_content_unlogged($content) {
    global $post;
    if($post->post_type == 'post' and !is_user_logged_in()){
        $content = '<p>';
        $content .= get_the_excerpt($post->id);
        $content .= '... <span style="color:red;">This content is only available for logged users</span>';
        $content .= '</p>';
    }

    return $content;
}
add_filter('the_content', 'ada_hide_content_unlogged');

En el ejemplo anterior, creamos un filtro sobre el Hook the_content. Éste llama a la función ada_hide_content_unlogged. Esta función lo que hace es comprobar si el visitante está logueado, y si no lo está, en la lugar de mostrar el contenido del post mostrará el resumen y un mensaje en color rojo.

Las funciones de callback que creemos, serán definidas con un prefijo que haga referencia al plugin o al theme sobre el que estamos desarrollando.

Algunos Hooks recomendados

Hook 1

Por defecto WordPress muestra un error al iniciar sesión si el usuario y/o la contraseña son erróneos. El problema es que te muestra que campo es el erróneo y esto puede beneficiar a atacantes de fuerza bruta. Para solucionar debemos añadir esto al archivo functions.php del theme, o en uno de nuestros plugins:

function ada_protect_login_error_message($errors) {
    $errors = 'Invalid credentials';
    return $errors;
}
add_filter('login_errors', 'ada_protect_login_error_message');

Captura antes de añadir el filtro:

Captura después de añadir el filtro:

Hook 2

Ocultar la versión de WordPress que estamos utilizando. Así no porporcionamos información sobre posibles vulnerabilidades a los atacantes.

function ada_remove_wp_version($type) {
  $type = '';
  return $type;
}
add_filter('the_generator', 'ada_remove_wp_version');

Escribe una respuesta