Métodos con y sin plugins para redirigir a los usuarios según su nombre o rol

Redirección de usuarios a páginas personalizadas al registrarse en WordPress

En respuesta a algunos comentarios en la página sobre cómo mostrar contenido personalizado en WordPress según el usuario que está conectado, vamos a ver ahora cómo redireccionar a nuestros usuarios a páginas diferentes según su rol o su nombre de usuario después de registrarse o iniciar sesión.

Dos ejemplos utilizando el filtro login_redirect, que sirve precisamente para cambiar la dirección de destino después de entrar en el sistema:

Cómo redireccionar al usuario según su rol

Si lo que pretendemos es enviar a los administradores, editores, autores, suscriptores… a páginas predefinidas por nosotros (cada uno a una diferente), podemos utilizar el código del siguiente ejemplo, añadiéndolo en un plugin de funciones o en el archivo «functions.php».

Si te sirve de ayuda, desde esta página puedes descargar un plugin de funciones vacío, a punto para activar y utilizar, y aprender más cosas sobre el archivo «functions.php».

// ---------------------------------
// Redirección de registro (login) 
// según el tipo (rol) de usuario.
// ---------------------------------
function mytheme_custom_login_redirect($redirect_to, $request, $user) {
    global $user;
    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
	
        // Si es un usuario administrador
        // le redirigimos a la página de gestión de plugins
        if ( in_array( 'administrator', $user->roles ) )
            return home_url( '/wp-admin/plugins.php' );

		// Si es un usuario con permisos de editor
		// le enviamos a la página de gestión de entradas.
		elseif ( in_array( 'editor', $user->roles ) )
			return home_url( '/wp-admin/edit.php' );
			
		// Y a todos los demás usuarios
		// les redirigimos a la página de inicio de la web.
		else
            return home_url();
				
	} else {
        return $redirect_to;
	}
}
add_filter( 'login_redirect', 'mytheme_custom_login_redirect', 10, 3 );

Cómo redireccionar según el nombre de usuario

Pero si no es el rol de usuario lo que nos interesa sinó el nombre con el que se conecta, primero tendremos que definir a qué página queremos enviar a cada uno.

Por ejemplo, en una web de una empresa que utilice WordPress, podría ser útil cambiar el destino por una página personalizada para cada usuario, en la que éste puede ver directamente después de registrarse información creada para él, en vez de ir al escritorio (Dashboard) y desde ahí tener que navegar hasta la página que nos interesa.

Después, si la idea es que estas páginas no estén disponibles para otros usuarios, podemos hacerlas privadas, protegidas por contraseña o accesibles solo para un usuario específico.

// ---------------------------------
// Redirección de registro (login)
// según el nombre de usuario.
// ---------------------------------
function mytheme_custom_login_redirect($redirect_to, $request, $user) {

	// Accedemos a la variable global
	global $user;
	
	// Guardamos el nombre de usuario en una variable
	$usuario = esc_attr($user->user_login);
	
	// Si el nombre de usuario es "admin"
	// le redirigimos a la página por defecto.
	if ( $usuario === 'admin' )
		return $redirect_to;

	// Si el nombre de usuario es "daniel"
	// le redireccionamos a la página especificada.
	elseif ( $usuario === 'daniel' )
		return home_url( '/usuarios/daniel/' );

	// Si el nombre de usuario es "julia"
	// le enviamos a la página especificada.
	elseif ( $usuario === 'julia' )
		return home_url( '/usuarios/julia/' );

	// Y si el usuario no es ninguno de los anteriores
	// hacemos que vaya a la página de inicio de la web.
	else
		return home_url();

}
add_filter('login_redirect', 'mytheme_custom_login_redirect', 10, 3);

En este código tendríamos que cambiar los nombres de usuario (admin, daniel y julia) y también las páginas de destino donde queremos que accedan al conectarse.

Esto mismo en forma de plugin quedaría así: redireccion-login-usuarios.zip
Solo hay que descargar el plugin, personalizar los cambios, subirlo y activarlo.

Redireccionar automáticamente a los usuarios a una página personalizada

En los ejemplos anteriores es necesario conocer previamente el nombre o el tipo de usuario que se conecta, para poder crear las reglas. Si lo que necesitamos es redireccionar de forma automática a una página determinada, una solución sencilla sería la siguiente:

1. Creamos una página cuya URL (enlace permanente o slug) coincida con el nombre de usuario. Es decir, el título de la página puede ser cualquier cosa, pero el enlace permanente tiene que ser exactamente igual que el nombre de usuario.

2. Modificamos el código del ejemplo anterior para que envíe automáticamente (es decir, de forma dinámica, sin tener que especificarlo en el código) al usuario a su página personal:

function mytheme_custom_login_redirect($redirect_to, $request, $user) {

	// Accedemos a la variable global
	global $user;

	// Guardamos el nombre de usuario en una variable
	$usuario = esc_attr($user->user_login);

	// Redireccionamos automáticamente al usuario a una página personalizada
	// que hayamos creado previamente, con su nombre como enlace permanente.
	// Por ejemplo: http://www.miweb.com/daniel/
	return home_url( '/' . $usuario . '/' );

}
add_filter('login_redirect', 'mytheme_custom_login_redirect', 10, 3);

En este caso, si el usuario se llama «julia», al conectarse a WordPress será redirigido a la dirección «www.ejemplo.com/julia/».

Esto puede ser útil, por ejemplo, para sitios web que necesiten mostrar información diferente a cada cliente, proveedores, etc.

Redirigir a todos los usuarios menos al administrador

Si necesitamos crear una redirección que afecte a todos los tipos de usuario excepto al administrador, podemos utilizar una función como esta:

function mytheme_custom_login_redirect( $redirect_to, $request, $user  ) {
	return ( is_array( $user->roles ) && in_array( 'administrator', $user->roles ) ) ? admin_url() : site_url();
}
add_filter( 'login_redirect', 'mytheme_custom_login_redirect', 10, 3 );

Incluir el formulario de acceso (login)

Una vez hecho esto, deberíamos incluir en alguna parte de la web un enlace a la página de acceso para que pudieran identificarse (wp-login.php) o bien añadir un formulario para iniciar sesión con wp_login_form().

Esta función se encarga de crear un formulario de acceso (login form) simple para utilizarlo en cualquier parte de la web. Podemos añadirlo por ejemplo en sidebar.php y darle un poco de estilo con CSS:

<?php wp_login_form(); ?>

Esto nos imprimirá un formulario como este:

Formulario de acceso creado con wp_login_form

Como se puede leer en los comentarios más abajo, la redirección de usuarios no funcionará si se utiliza el plugin «Sidebar Login». Este plugin gestiona las redirecciones por su cuenta y permite redirigir a una URL distinta, tanto al iniciar sesión como al salir.

Otros plugins para gestionar la redirección de registros en WordPress

Peter’s Login Redirect
Redirige a los usuarios a diferentes páginas después de registrarse, tanto al iniciar sesión como al desconectarse.

WordPress Login Redirect
Este plugin redirige a los suscriptores a la página de inicio después de conectarse.

Login Redirect
Envía a los usuarios a una URL específica al entrar en el sistema, sustituyendo el comportamiento por defecto de redirigir al escritorio.

Logout Redirect
Envía automáticamente a los usuarios de WordPress a una URL personalizada al cerrar sesión.

Comentarios

Responder a Ismael Teran Cancelar la respuesta

Las URLs se convertirán en enlaces automáticamente. Tu dirección de email no se publicará ni se utilizará para enviar ningún tipo de información. Los mensajes que no aporten nada al tema que se trata en esta entrada se borrarán. Las imágenes que aparecen al lado de cada autor utilizan el servicio de Gravatar. Recuerda que puedes usar etiquetas HTML como <a href>, <code>, <em> o <strong> en los comentarios.

(necesario)

(opcional)

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.