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

  1. Leandro

    Excelente Post Daniel.. estoy haciendo las pruebas.. Te aviso, y Muy agradecido por tus respuestas y compartir tus conocimientos. Grande..

  2. Leandro

    Hola Daniel.. Mira estuve haciendo ambas pruebas para redireccionar los usuarios, pero no me funcionan, instalé un wordpress desde cero, active el plugins “Sidebar Login”, cree un usuario: “usuario01” instalé el plugins que dejaste en el post de redireccionar por usuario y lo redireccioné a una página nueva que cree.. cuando accedo con clave y usuario01, No redirecciona.

    Incluso cuando copié y pegue en el archivo functions.php el primer código para que redireccione segun el rol, y la web me da un error el cual te copio.

    (Fatal error: Cannot redeclare mytheme_custom_login_redirect() (previously declared in C:\xampp\htdocs\wordpress\wp-content\plugins\redireccion-login-usuarios\redireccion-login-usuarios.php:15) in C:\xampp\htdocs\wordpress\wp-content\themes\twentyeleven\functions.php on line 29)

    Entonces no sé si no estoy haciendo las cosas como se debe hacer o que pasa? si me puedes ayudar..

    Saludos y muchas gracias.!!!

  3. Daniel

    El error es simplemente porque has activado dos veces la misma función (como plugin y en functions.php). Elimina uno de los dos y el error desaparecerá.

    En el caso que comentas, la redirección no funciona porque el plugin “Sidebar Login” gestiona las redirecciones por su cuenta. Incluso permite redirigir a una URL distinta, tanto al entrar como al salir.

    Si pruebas a entrar desde la página de login de WordPress verás que funciona bien la redirección, pero no en combinación con este widget.

  4. Leandro

    Excelente Daniel.. ahora sí quedó bien!! Muchisimas Gracias y excelente info..

    Saludos!

  5. Marcos

    Excelente, mi enhorabuena

  6. alicia

    Hola Daniel
    Excelentes post, pero me estoy volviendo loca porque necesito que cada usuario entre a un apartado diferente, es decir dar de alta un usuario pero que vea una entrada cada especifica, he probado con Members pero claro tengo que estar creando roles diferentes. ¿Como puedo solucionarlo?
    Gracias

  7. Daniel

    Hola Alicia. Para lo que comentas no parece que sea necesario utilizar el plugin Members. Si se trata de redirigir a cada usuario a una URL diferente, puedes hacerlo con el segundo bloque de código que hay arriba (donde pone “Cómo redireccionar según el nombre de usuario”).

    Con esto puedes definir una dirección diferente para cada usuario, en vez de crear un rol nuevo cada vez.

  8. Ingeweb.es

    Muchísimas gracias y muy bien explicado!.

  9. Joselito

    Cada vez que edito el archivo functions.php de cualquier plantilla me aparece un error de cookies arriba de los campos para iniciar sesion, y cada vez que quiero iniciar me dice que los datos cargados no son correctos con cualquier usuario o sino se queda la pagina en blanco y no carga…

  10. Alfredo

    Hola Daniel. Tu post me viene al pelo para hacer una cosa que estoy intentando hacer, muchas gracias.

    Me gustaría que cada usuario sea redirigido a una página creada con su nombre. Es decir, si creo un usuario daniel, quiero que cuando se loguee, vaya a una página llamada /daniel/, pero la redirección tiene que ser automática, es decir, no se puede entrar en el código y modificarlo manualmente cada vez que se cree un cliente nuevo… Modificando tu código he sacado algo así:

    if ( isset( $user->roles ) && is_array( $user->roles ) ) {
     
    	// Si es un usuario con permisos de editor
    	// le enviamos a la página de gestión de entradas.
    	elseif ( in_array( 'suscriptor', $user->roles ) )
    		return home_url( '/'. $user->user_login );
        } else {
            return $redirect_to;
        }
    }
    add_filter( 'login_redirect', 'mytheme_custom_login_redirect', 10, 3 );
    

    Pero me da error porque supongo que esta sentencia es errónea “return home_url( ‘/’. $user->user_login );”

    Alguna ayudilla que me puedas echar??

    Muchas gracias!!!!

  11. fernando

    Hola Daniel, muy buena pagina. Estoy buscando algo como lo que dice Alfredo…
    Que cada usuario sea dirigido de forma automatica cuando loguee a una pagina especialmente creada para el…
    Las paginas y nombre de usuarios son creados previamente por el administrador y comunicados a la persona que lo utiliza.

  12. Daniel

    Hola Alfredo y Fernando.
    Para poder redirigir automáticamente a una página personalizada, bastaría sustituir en el código la dirección de destino por algo dinámico, por ejemplo:

    return home_url( '/' . $usuario . '/' );

    Es decir, no redirigimos a una URL definida en el código sinó que enviamos al usuario a la página que coincida con su nombre.

    Más arriba he ampliado la entrada con un ejemplo y explicación de este caso.

  13. Ricardo

    Muy buen artículo, realmente me encantan tus tutoriales y me vienen muy bien para mi trabajo, gracias.

  14. Jose Luis

    Hola Daniel, gracias por tu pagina, he sacado provecho de muchos tips de los que has publicado, mi pequeño problema que no se donde colocar para que al ciclar sobre un elemento del menú principal de mi web llamado Área de clientes me aparezca el form de login. La redirección de usuarios funciona perfectamente pero desde wp-admin. agradeceria enormemente algún consejo.

  15. Jose Luis

    Lo que no se colocar según mi comentario anterior es wp_login_form().

  16. Alberto

    Hola Daniel:
    Estoy creando una web para un vecindario y lo que quieren es que cada vecino tenga acceso a una especie de area personal en la que los administradores puedan colgar recibos o facturas personales para cada usuario. Sería posible lograr esto con la opción que pones de “cómo redireccionar según el nombre de usuario”. Uso un plugin para mostrar el perfil de cada usuario pero me gustaria que al registrarse en lugar de ir al perfil que crea el plugin para el usuario fuese a la página personalizada… No se si es posible.

    Gracias de anteamno por tu ayuda y enhorabuena por el blog

  17. Alejandro

    Hola Daniel.

    Me gusta mucho la solución que has aportado para poder mostrar contenidos personalizados en nuestro wordpress.

    Pero me gustaría ir un poco más allá, y ¿se podría, por ejemplo, crear en nuestro menú principal un enlace que nos redirija a esa página?

    Es decir, pongamos que en nuestro menú principal tengo un enlace que se llame “Mi sección privada”, ¿hay alguna manera para que, una vez me doy de alta como usuario y tenga mi página personalizada, pueda pinchar en ese enlace y me lleve a ella?

    Espero haberme explicado con claridad y muchas gracias por tus ayudas

  18. Christopher

    Hola Daniel, excelente blog y magnífico artículo. Felicidades! Te comento que estoy intentando hacer algo similar a lo que planteas aquí y lo que busca Alfredo. Te comento más en detalle: quiero que al registrarse un usuario, automáticamente se cree una página personal para él y siempre sea redirigido a esa página cuando acceda. En dicha página estaría un formulario para que el usuario lo complete (en este caso subiría imágenes e información adicional de dichas imagenes) y pueda editarla o actualizarla.
    Dicha página personal no sería accesible para nadie más que para el usuario en cuestión. Lo otro que me gustaría, es que al registrarse también se cree automáticamente una carpeta para el usuario, de manera que sus imágenes que suba vayan directamente a dicha carpeta. Algo así como: /uploads/nombre-de-usuario. No hay mucha información en internet para hacer algo así y la verdad es algo que mucho necesitamos. Estaría genial si pudieras dar una luz al respecto. Saludos!

  19. Inma Alonso

    Hola Daniel,
    estoy buscando un pluggin de registro como por roles en los que cada uno de ellos verá la aplicación con más o menos información. Por ejemplo, una página en la que los pacientes suben información que los doctores luego podrán revisar. Entonces, Administrador o doctor verá todo, pero paciente verá solo una pequeña parte con su información.
    No encuentro esa segmentación.
    Muchas gracias

  20. Gdf

    Un máquina! Gracias tio :) me has ayudado a redireccionar mi web! Saludos!

  21. Gracias por tu ayuda, soy de Ecuador, cualquier proyecto que quieras realizar en mi país estaré gustoso de ayudarte.

    Saludos..

  22. LUIS

    Hola a todos. Les cuento que tenia problemas con la segunda opción que era “Cómo redireccionar según el nombre de usuario”.

    Estuve por horas intentando usar esta función correctamente pero no lograba tener resultados, me redireccionaba al home y no a paginas especificas.

    Pero bueno después de varias horas de rompecabezas estuve desactivando uno por uno los plugins que tenia activado y resultó que el plugin popular “Lockdown WP Admin” no es compatible con este tipo de función. Lo desactive y WOALAAA! funciono correctamente.
    Ahora puedo redireccionar correctamente a mis clientes a paginas especificas.

    Sigue así Daniel! Esperamos nuevos post tuyos, que son de gran ayuda.

    Animos!

  23. ivan

    Hola a todos. Estoy buscando alguien para un buen proyecto que tengo, hacer una web. Las características principales son: por un lado, los usuarios de la web pueden ver información, ordenarla por sus gustos (precios, confianza de otros usuarios, cercanía, etc.). Por otro lado, que tenga acceso a profesionales, que pueden entrar con un código que lo facilito yo, colgar breve info, alguna fotos o vídeo de sus productos y servicios.
    La parte de profesionales quiero que les puedo administrar yo totalmente, aunque ellos van a colgar su info.
    Muchas gracias a todos! ivanabv@outlook.es

  24. Ismael Teran

    Buenas noches, primero que nada felicitarte por este espacio y lo que he podido apreciar has ayudado a personas como yo que somos novatos en este mundo tan fascinante como es el WordPress.

    Sin más y esperando no te incomode te expreso mi caso para ver si pudieras de alguna manera asesorarme de como puedo solucionar el proyecto que inicie el cual te agradecería mucho.

    Elabore un sitio de tutorías para una universidad, el cual está enfocado a profesores y alumnos de una carrera, el cual el principal objetivo es acercarlos y brindarles una herramienta más para que tengan una comunicación más directa y personalizada entre ambas partes. La idea es que al iniciar sesión cuenten con un espacio, ya sea página o entrada, en el que sea visible únicamente esos dos usuarios (profesor y alumnos) con el fin de que puedan comentar y compartir recursos de manera privada. Esa es mi duda espero puedas ayudarme. Gracias.

  25. Daniel

    Hola Ismael.
    Podrías crear páginas o entradas para cada alumno y protegerlas con contraseña, así sólo tendrían acceso las personas que saben esa contraseña. Lo que pasa es que de esta manera sólo podrían interactuar a través de los comentarios.
    Tal vez para lo que planteas sea mejor utilizar otras herramientas pensadas para compartir y colaborar, como por ejemplo Slack

  26. Amelia

    En WordPress, cuando el resultado de la búsqueda es nulo, aparece la cita de Winston Churchill.
    Podría sustituir este mensaje por algo como “Lo siento no hay resultados”? No se dónde ni como poner el código.
    Gracias.

  27. Daniel

    Hola Amelia.
    Seguramente eso es cosa del tema que tienes activado. Mira a ver si encuentras algún archivo como “search.php” o “no-results.php” que den alguna pista sobre qué función se encarga de generar esas citas.

  28. pedro

    Éxitos en lo que haces y gracias por la info. Tengo una consulta, quiero saber si es posible hacer que de una pagina específica redireccione a otra al acceder al sistema. Ejemplo. tengo el formulario de login, y login con facebook, en una pagina específica y solo cuando se logeen de esa pagina los redireccione a otra pagina también especifica.

    Gracias por la respuesta y saludos desde Perú.

  29. Samuel

    Hola Daniel,
    tengo un problema que no consigo solucionar en ningun lugar,
    cuando inicio sesion en mi web estando en otra de las paginas distintas a la principal, puse que al darle a conectar me lleve a una web para ingresar los datos de la sesion (Usuario y contraseña) cuando el usuario inicia le devuelve a la misma pagina de la sesion, en esta misma ahora que esta conectado aparecen varios datos del usuario y pone un mensaje (Redireccionará a la pagina que estabas en 5 segundos) para esto uso un history.back(-2) y me devuelve a la pagina donde estaba antes de iniciar la sesion, el unico problema es que debo recargar la pagina manualmente para que se borre la cache de que no estaba conectado y se actualice a la sesion que acabo de hacer, no hay alguna forma de usar un History back en java y que a la misma vez recargue la pagina a la que te lleva?, esto me esta trayendo muchos problemas

    porque por ejemplo en la web principal tengo un chat que necesitas estar conectado para utilizarlo y me pasa igual, conecto, me devuelve a la pagina donde estaba y no esta recargada como (usuario conectado) sino que sigue con la caché antigua y debo actualizar la web manualmente para que detecte la conexión

    La pagina del inicio de sesion se recarga porque en la validacion pongo un enlace directo a redirigir, por eso cuando vuelve a la web del inicio de sesion aparece recargada diciendo que volvera a la web donde estabas antes del inicio en 5s, pero claro, yo no puedo poner un enlace directo a la web que va a direccionar finalmente, poque son muchas, es una web dinamica, por eso utilizo histoy back, para que me devuelva a donde estaba, pero asi no se recarga :(

    Espero que me hayas entendido, cualquier duda contacta conmigo,

    PD: si no tengo mas remedio que crear 300 archivos de validacion con enlace directo individual para cada uno de los htmls donde te conectas pues lo haré, pero es un curro :( si con un history back actualizando me ahorro todo eso…

  30. Fausto

    Hola Daniel, necesito hacer algo. Quiero que cuando un usuario se registre en mi página, ya quede logueado automaticamente sin que tenga que iniciar sesión. Como lo hago?? Gracias

  31. Hola Daniel, tengo la página mencionada y quiero que el link https://decoreforma2000.com/wp-login se redireccione a la página principal. He renombrado el acceso wp-admin. Me gustaría hacerlo dentro del archivo .htaccess. Gracias por adelantado.

  32. Gtav Apk

    Gracias por la ayuda Daniel, me ha venido super bien para afrontar un pedido de un cliente.

Y tú qué opinas?

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)