En este artículo vamos a explicar cómo redirigir al usuario cuando inicia o cierra sesión en WordPress. Ésto puede resultar muy útil en un desarrollo a medida, por ejemplo: En nuestro front tenemos un formulario de login, y queremos que cuando un usuario inicie sesión, sea redirigido directamente a un área privada a la que sólo tienen acceso los usuarios registrados.
También puede ser muy útil que cuando un usuario haga logout o cierre sesión, en lugar de redirigir al wp-login, te envíe a la home de nuestro sitio.
Redirigir al usuario cuando inicia sesión
Debemos añadir unas líneas de código a nuestro functions.php, donde crearemos una función para redirigir al usuario que añadiremos al action wp_login. Imaginemos que tenemos una página llamada “Área Privada” que sólo es accesible a usuarios logeados, vamos a ver cómo podemos redirigir al usuario allí cuando inicie sesión:
<?php
function my_custom_login_redirect(){
//Pasamos a la función home_url() el slug de nuestra página de Área Privada
wp_redirect( home_url("area-privada") );
exit();
}
add_action( 'wp_login','my_custom_login_redirect' );
Redirigir al usuario cuando cierra sesión
Prácticamente igual que antes, pero en lugar de usar el hook wp_login, usaremos el hook wp_logout. Es decir, sólo tendremos que añadir en nuestro functions.php:
<?php
function my_custom_logout_redirect(){
wp_redirect( home_url() );
exit();
}
add_action( 'wp_logout', 'my_custom_logout_redirect' );
Con estas dos simples funciones podemos enviar al usuario donde queramos cuando inicie o cierre sesión. Podemos incluso ir un poco más allá: filtrar por tipo de usuario y en función de su rol redirigirle a un sitio u otro.
En el ejemplo anterior al iniciar sesión, puede que nos interese esta funcionalidad sólo para los usuarios suscriptores por ejemplo, pero cuando el login sea de un usuario administrador, que vaya directamente al backend. En este caso tendríamos que recurrir al filtro login_redirect, y actuar sobre él en función del rol:
<?php
function my_custom_login_redirect($redirect_to, $request, $user) {
global $user;
if ( isset( $user->roles ) && is_array( $user->roles ) ) {
if ( in_array( 'subscriber', $user->roles ) ) {
return home_url("area-privada");
}
}
return $redirect_to;
}
add_filter( 'login_redirect', 'my_custom_login_redirect', 10, 3 );