1. Code
  2. PHP

Gestión de redirecciones en WordPress con filtros

Si eres nuevo en el ecosistema de WordPress, es posible que te resulte un poco difícil entender la flexibilidad que WordPress te puede llegar a proporcionar. Claro, literalmente existen decenas de miles de temas y plugins que puedes usar, y puedes pensar que WordPress es terriblemente extensible, pero si no conoces las "acciones" y los "filtros" que el propio WordPress proporciona de forma nativa, te sorprenderá cuánto más puedes hacer con este increíble sistema de gestión de contenido.
Scroll to top

Spanish (Español) translation by Eva Collados Pascual (you can also view the original English article)

Si eres nuevo en el ecosistema de WordPress, es posible que te resulte un poco difícil entender la flexibilidad que WordPress te puede llegar a proporcionar. Claro, literalmente existen decenas de miles de temas y plugins que puedes usar, y puedes pensar que WordPress es terriblemente extensible, pero si no conoces las "acciones" y los "filtros" que el propio WordPress proporciona de forma nativa, te sorprenderá cuánto más puedes hacer con este increíble sistema de gestión de contenido.

En este tutorial, voy a guiarte a través del uso de filtros de WordPress para cambiar las páginas a las que redirigir tras la ejecución de distintas acciones.

¡Empecemos!

Aprovecha la flexibilidad de WordPress con acciones y filtros

Con la audaz prédica que hice en la introducción, podrías pensar que exageré un poco. Te aseguro que no fue así. Los ganchos son, sin lugar a dudas, la razón real de la flexibilidad de WordPress. Sin el sistema de ganchos, los temas serían mucho más rígidos y, lo que es más importante, la mayoría de los plugins de WordPress ni siquiera existirían. Esto significaría que los desarrolladores desarrollarían menos plugins y temas, y el mundo de WordPress sería mucho más pequeño, en consecuencia sería otro sistema de gestión de contenido aburrido.

Los ganchos están destinados a hacer lo que indica su nombre: enganchar cosas. Existen dos tipos de ganchos, ganchos de acción y ganchos de filtro. Los ganchos de acción desencadenan funciones antes o después de que se produzcan acciones concretas y los ganchos de filtro controlan los datos antes de ser generados. (En este tutorial nos centraremos en los ganchos de filtro.) Por eso, para controlar WordPress, la mayoría de los plugins dependen de ganchos, y los temas crean sus propios ganchos para que otros plugins puedan permitir que otros extiendan los temas.

No pude encontrar una fuente confiable sobre cuando se introdujeron los ganchos en WordPress, pero en la publicación que anunció la versión 1.2 en WordPress.org, se integra una nueva arquitectura de plugin y dice que "los plugins ahora pueden engancharse a casi todas las acciones que WordPress ofrece". Si ese es el comienzo de la introducción de los ganchos de WordPress, significa que los ganchos nacieron en la primavera de 2004, un año después de que se lanzara la primera versión de WordPress.

Si quieres aprender más sobre las acciones y los filtros en WordPress, tengo una serie para cada tipo de gancho: "50 filtros de WordPress" y "50 acciones de WordPress". Si estás interesado, ¡asegúrate de echarle un vistazo!

Gestión de la redirecciones de WordPress en diferentes escenarios

Como prometí, voy a llegar a los filtros de WordPress ahora. En este tutorial vamos a aprender siete filtros de WordPress: uno para registros, dos para inicios de sesión y cierres de sesión, uno para restablecimientos de contraseña, uno para comentarios y dos para la característica recientemente renovada "Presiona esto".

Nota: Puedes utilizar los fragmentos de código en este tutorial en el archivo functions.php de tu tema para ponerlos en uso rápidamente, aunque editar archivos de tema con fines de funcionalidad se considera una mala práctica. (Echa un vistazo a mi tutorial sobre "territorio plugin".) En su lugar, para este propósito, debes crear un plugin específico del sitio. (Echa un vistazo al video tutorial de Rachel sobre la creación de un plugin.)

Redirigir al usuario tras su registro exitoso

Normalmente, los nuevos usuarios son redirigidos al formulario de inicio de sesión con este aviso: "Registro completo. Por favor, revisa tu correo electrónico." Con la ayuda del filtro registration_redirect, vamos a cambiar esto.

Supongamos que tienes un informe técnico especial sobre tu área de especialización y lo ofreces a los nuevos usuarios en tu sitio web. Usando el siguiente fragmento de código, puedes enviar a los nuevos usuarios a una página que contenga un enlace de descarga para tu libro blanco o "white paper":

1
<?php
2
3
add_filter( 'registration_redirect', 'redir_new_users' );
4
 
5
function redir_new_users() {
6
	// change the slug below with your own page's slug

7
    return home_url( '/white-paper/' ); 
8
}
9
10
?>

¡Edita el slug de tu libro blanco e introduce el slug de tu propia página y listo!

Redireccionar al usuario al iniciar y cerrar sesión

Después de cada inicio de sesión, los usuarios serán dirigidos al escritorio. Si los usuarios no necesitan (o no deben) ver el escritorio por cualquier motivo, puedes mantenerlos en el front-end mediante el filtro login_redirect.

En el siguiente ejemplo, vamos a comprobar el rol de usuario y redirigir a los "suscriptores" a la página de inicio:

1
<?php
2
3
add_filter( 'login_redirect', 'send_subscribers_home', 10, 3 );
4
 
5
function send_subscribers_home( $location, $request, $user ) {
6
    global $user;
7
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
8
        if ( in_array( 'subscriber', $user->roles ) ) {
9
            return home_url();
10
        } else {
11
            return $redirect_to;
12
            }
13
    }
14
    return;
15
}
16
17
?>

Lo mismo se puede hacer con el filtro logout_redirect. En lugar de enviarlos a la página de inicio, puedes redirigirlos a una página de "despedida" donde puedan confirmar que han cerrado sesión:

1
<?php
2
3
add_filter( 'logout_redirect', 'goodbye_subscribers', 10, 3 );
4
 
5
function goodbye_subscribers( $location, $request, $user ) {
6
    global $user;
7
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
8
        if ( in_array( 'subscriber', $user->roles ) ) {
9
			// change the slug below with your own page's slug

10
            return home_url( '/goodbye/' );
11
        } else {
12
            return $redirect_to;
13
            }
14
    }
15
    return;
16
}
17
18
?>

Redireccionar al usuario tras el restablecimiento de contraseña

De forma predeterminada, los usuarios que introducen sus nombres de usuario o direcciones de correo electrónico en el formulario "Restablecer contraseña" son enviado de vuelta al formulario de inicio de sesión con un aviso para comprobar sus correos electrónicos de manera que puedan restablecer sus contraseñas. El filtro lostpassword_redirect nos permite cambiar esa página.

El aviso "Revisa tu correo electrónico para obtener el enlace de confirmación" es suficiente para la mayoría de los sitios web de WordPress, pero si necesitas compartir más información sobre el proceso de restablecimiento de contraseñas (como "Comprueba tu carpeta SPAM" o "Llama a este número si no tienes ningún correo electrónico"), puedes redirigir a tus usuarios a una página concreta:

1
<?php
2
3
add_filter( 'lostpassword_redirect', 'lostpassword_message' );
4
 
5
function lostpassword_message( $location ) {
6
	// change the slug below with your own page's slug

7
    return '/lost-password-notice/';
8
}
9
10
?>

Redirecciona al usuario cuando haga un comentario

El filtro comment_post_redirect te permite cambiar la página a la que son dirigidos los usuarios que hacen un comentario o después de haberlo enviado.

Este podría ser el mejor consejo de este tutorial porque puedes aumentar los suscriptores a tu newsletter. Por ejemplo, puedes enviarlos a una página "Gracias por comentar, y no olvides suscribirte a nuestra boletín de noticias" utilizando las siguientes líneas de código:

1
<?php
2
3
add_filter( 'comment_post_redirect', 'redirect_to_newsletter' );
4
 
5
function redirect_to_newsletter( $location ) {
6
	// change the slug below with your own page's slug

7
    return '/subscribe-to-our-newsletter/';
8
}
9
10
?>

Redireccionar al usuario al usar "Pulse esto"

"Pulsa esto" es una sencilla herramienta para publicar o guardar publicaciones de forma rápida, pero tiene algunas limitaciones. Por ejemplo, después que uses el marcador de tu sitio web "Presiona esto", te hace volver a la página que estás compartiendo dentro de la ventana emergente, mientras esa página ya está abierta en tu navegador. Extraño, lo sé.

Afortunadamente, podemos cambiarlo, con la ayuda de los filtros press_this_redirect_in_parent y press_this_save_redirect. Usando el siguiente código conseguirás que la herramienta "Presione esto" cierre la ventana emergente (primer filtro) y vuelva a la página principal de tu propio sitio web (segundo filtro):

1
<?php
2
3
// use the built-in __return_true() WordPress function to simply return a "true" boolean statement

4
add_filter( 'press_this_redirect_in_parent', '__return_true' );
5
6
// return the home URL to redirect the author to the homepage

7
add_filter( 'press_this_save_redirect', function( $url, $id, $status ) {
8
	return home_url();
9
}, 10, 3 );
10
11
?>

Mini consejo: ¿Has notado que usé una función anónima? Así es: Puedes pasar una función PHP anónima si tu servidor está ejecutando PHP v5.3.0 o superior.

Recopilando todo

El sistema de "ganchos" es una de las características más poderosas de WordPress, y ha ayudado a la comunidad a generar la gigantesca masa de excelentes plugins y temas que utilizamos a día de hoy. Sin "ganchos de acción" ni "ganchos de filtro", probablemente sería imposible alcanzar este nivel de extensibilidad. Y creo que podemos afirmar con seguridad que sin estos ganchos, WordPress no sería empleado en uno de cada cuatro sitios web. Sea quien sea al que se le ocurrió la idea de estos "ganchos", ¡gracias!

¿Qué opinas de los filtros que hemos revisado en este tutorial? ¿Se te ocurren mejores casos de uso para ellos? ¿O crees que olvidé algún gancho que podría mencionarse en este post? Comparte tus pensamientos, experiencias e ideas con nosotros a través de la sección de comentarios que viene a continuación. Y si te ha gustado leer este artículo, ¡no te olvides de compartirlo con tus amigos y colegas!

Para cualquier otra cosa que no esté relacionada con este artículo, puedes ponerte en contacto conmigo a través de Twitter en @BarisUnver_EN (inglés) y @BarisUnver (turco) en.

¡Gracias por leer!