Redirigir usuarios tras iniciar sesión en WordPress

Flujo de redirección de usuarios después de iniciar sesión en WordPress

Después de iniciar sesión, no todos los usuarios tienen que acabar en el mismo sitio. Un administrador suele necesitar el escritorio; un cliente, su cuenta; y un suscriptor puede encajar mejor en una página de bienvenida. WordPress permite decidir ese destino con el filtro login_redirect, sin depender de funciones antiguas ni de niveles numéricos.

La versión original de este artículo utilizaba get_currentuserinfo(), user_level y una acción en admin_init. Ese enfoque ya no es el adecuado para una instalación actual: los niveles de usuario dejaron de ser la base recomendada para tomar decisiones y una redirección después del login debe engancharse al flujo de autenticación.

Las claves de la redirección en 20 segundos

  • Usa login_redirect: es el filtro de WordPress para modificar la URL posterior a un login correcto.
  • Trabaja con el objeto WP_User: comprueba capacidades o roles, no el antiguo user_level.
  • Respeta el destino solicitado: si el usuario iba a entrar en una página protegida, no lo envíes siempre a otro lugar.
  • Evita redirecciones abiertas: valida las URL y mantén los destinos dentro de tu propio sitio.

La forma recomendada: el filtro login_redirect

El filtro oficial recibe tres valores: el destino que WordPress ha preparado, el destino solicitado mediante redirect_to y el usuario autenticado. La documentación de WordPress advierte, además, de que el usuario global puede no estar disponible todavía; por eso conviene utilizar el tercer parámetro que entrega el propio filtro.

add_filter( 'login_redirect', function ( $redirect_to, $requested_redirect_to, $user ) {
    if ( ! $user instanceof WP_User ) {
        return home_url( '/' );
    }

    // Mantén el acceso del personal con permisos de administración.
    if ( $user->has_cap( 'manage_options' ) ) {
        return admin_url();
    }

    // Clientes y suscriptores pueden ir a una página pública o privada.
    if ( in_array( 'customer', (array) $user->roles, true ) ) {
        return home_url( '/mi-cuenta/' );
    }

    return home_url( '/bienvenida/' );
}, 10, 3 );Lenguaje del código: PHP (php)

Cambia /mi-cuenta/ y /bienvenida/ por páginas que existan en tu instalación. Si no utilizas WooCommerce, sustituye la primera por la zona privada o el panel que corresponda. El código debe colocarse en un plugin específico del sitio o en el archivo functions.php de un tema hijo. Evita editar el tema principal: una actualización podría borrar el cambio.

En este ejemplo se comprueba la capacidad manage_options para identificar a los usuarios con permisos de administración y se consulta el rol customer para WooCommerce. Los roles son útiles para reglas sencillas, pero una capacidad expresa mejor lo que el usuario puede hacer cuando se trata de permisos. Si tienes roles personalizados, reemplaza esas condiciones por las capacidades que hayas definido.

Cómo conservar la página que el usuario quería visitar

WordPress suele incluir un parámetro redirect_to cuando alguien intenta entrar en una página que exige autenticación. Sobrescribirlo siempre puede empeorar la navegación: el usuario acabará en la portada aunque hubiese solicitado un área concreta. Una regla práctica es mantener el destino que ya ha preparado WordPress cuando sea válido y aplicar tus reglas solo cuando no exista un destino solicitado.

add_filter( 'login_redirect', function ( $redirect_to, $requested_redirect_to, $user ) {
    if ( ! $user instanceof WP_User ) {
        return $redirect_to;
    }

    if ( ! empty( $requested_redirect_to ) ) {
        $safe_requested_url = wp_validate_redirect( $requested_redirect_to, '' );

        if ( $safe_requested_url ) {
            return $safe_requested_url;
        }
    }

    if ( $user->has_cap( 'manage_options' ) ) {
        return admin_url();
    }

    return home_url( '/mi-cuenta/' );
}, 10, 3 );Lenguaje del código: PHP (php)

Esta variante debe probarse con especial cuidado si el sitio usa un dominio adicional, un sistema de membresía o una instalación multisitio. wp_validate_redirect() permite filtrar destinos no permitidos; si necesitas aceptar otro dominio de confianza, debes configurarlo de forma expresa y conocer el riesgo que implica.

Cuándo usar wp_safe_redirect()

login_redirect es un filtro que devuelve una URL, por lo que en ese punto no necesitas lanzar una redirección por tu cuenta. En una función que sí controle directamente la respuesta, WordPress ofrece wp_safe_redirect(). Comprueba que el destino sea local y, a diferencia de wp_redirect(), ayuda a evitar que una entrada manipulada envíe al visitante a un dominio externo.

$url = home_url( '/mi-cuenta/' );

if ( wp_safe_redirect( $url ) ) {
    exit;
}Lenguaje del código: PHP (php)

No confíes en una URL recibida por GET o POST sin validarla. Tampoco redirijas al propio formulario de login, porque crearás un bucle del que el visitante no podrá salir. Después de cambiar la regla, prueba un administrador, un usuario normal, un usuario sin permisos y un intento de acceso a una página privada.

Alternativas sin escribir código

Si prefieres gestionar las reglas desde el panel, LoginWP permite definir destinos según usuarios, roles y capacidades, y utiliza el filtro estándar de WordPress. Otra opción es Role Based Redirect, que añade reglas de entrada y salida por rol y opciones para limitar el acceso al escritorio.

Instala solo uno de estos plugins y revisa su actividad, compatibilidad y soporte antes de activarlo en producción. En WooCommerce, comprueba primero las opciones de la página Mi cuenta y el comportamiento del carrito o del pago: una regla global puede interferir con el regreso al checkout.

Seguridad y mantenimiento de la regla

  • Usa siempre HTTPS y no incluyas contraseñas, tokens ni datos personales en las URL.
  • Conserva el destino original cuando sea local y necesario para completar una tarea.
  • Comprueba capacidades con current_user_can() o con WP_User::has_cap(); no bases permisos en el número de un nivel antiguo.
  • Prueba el login con y sin cookies, en móvil y en una ventana privada para descartar falsos positivos de caché.
  • Si el acceso lo gestiona un plugin de membresía, una tienda o un proveedor externo, consulta sus propios ganchos antes de añadir una regla general.

Una redirección no sustituye al resto de medidas de protección. Mantén WordPress, temas y plugins actualizados, limita los intentos de acceso y activa una segunda capa de autenticación cuando el proyecto lo necesite. Si pierdes el acceso, tienes también esta guía sobre cómo recuperar la contraseña de WordPress de forma segura.

Fuente: documentación oficial de login_redirect y referencia de wp_safe_redirect() de WordPress.

David Carrero Fernández-Baillo

Experimentando con un sitio web sobre WordPress, este popular gestor de contenidos, entre otros muchos proyectos.

Te puede interesar...

  1. Hola gracias por el post! pero este codigo solo lo pego en el Functions.php y ya esta? o hay un paso más? Gracias nuevamente!

    • buena info pero tengo la misma duda, basta con ponerlo ahi? en que posicion arriba? abajo? gracias por la info

  2. Existe un pequeño error, «else if ($current_user->user_level == 0)», en realidad debería de ser «If ($current_user->user_level == 0)», sino da problemas con el resto de funciones. Saludos

Comments are closed

WordPress Directo
WPDirecto.com es una revista especializada en WordPress y WooCommerce que ofrece una amplia gama de recursos, incluyendo tutoriales, análisis de plugins y plantillas, consejos de optimización y estrategias de SEO, para ayudar a los usuarios a mejorar y personalizar sus sitios web, manteniéndolos informados sobre las últimas novedades y tendencias en el mundo de WordPress.

© 1995-2025 Color Vivo Internet, SLU (Medios y Redes Online).. Otros contenidos se cita fuente. Infraestructura cloud servidores dedicados de Stackscale.