---
title: "Redirigir usuarios tras iniciar sesión en WordPress"
description: "Aprende a redirigir a cada usuario al lugar adecuado después de iniciar sesión en WordPress, con el filtro oficial login_redirect, código seguro y alternativas sin tocar PHP."
url: https://wpdirecto.com/redireccionar-usuarios-despues-del-login/
date: 2012-02-20
modified: 2026-09-10
author: "David Carrero Fernández-Baillo"
image: https://wpdirecto.com/wp-content/uploads/2026/09/redirigir-usuarios-login-wordpress.jpg
categories: ["Guías"]
tags: ["functions.php", "login", "redirección"]
type: post
lang: es
---

# Redirigir usuarios tras 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](https://wordpress.org/plugins/peters-login-redirect/) permite definir destinos según usuarios, roles y capacidades, y utiliza el filtro estándar de WordPress. Otra opción es [Role Based Redirect](https://wordpress.org/plugins/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](https://wpdirecto.com/recuperar-y-cambiar-contrasena-a-traves-de-functions-php/).

**Fuente:** [documentación oficial de login_redirect](https://developer.wordpress.org/reference/hooks/login_redirect/) y [referencia de wp_safe_redirect()](https://developer.wordpress.org/reference/functions/wp_safe_redirect/) de WordPress.
