¿Redirigir al usuario a la URL original después de iniciar sesión?

15

Tengo una función que redirige a los usuarios a la página de inicio de sesión (inicio) si intentan acceder a otra página sin iniciar sesión, así es como funciona:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( get_option('home') );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

Realmente simple y funciona bien, el problema es que debo redirigirlos a la URL a la que intentaban acceder después de iniciar sesión correctamente, exactamente como funciona el backend de WordPress.

¿Hay una manera de hacer esto? Gracias de antemano!

    
pregunta Javier Villanueva 30.04.2011 - 05:35

7 respuestas

4

Gracias a todos, utilicé un poco de lo que todos recomendaron para que al final mi código tenga este aspecto:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( get_option('home') . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

Y en mi formulario de inicio de sesión (estoy codificando mi formulario de inicio de sesión en mi solicitud gracias a @Ashfame por informarme sobre wp_login_form No tenía idea de que existiera). Agregué esto cuando las credenciales de usuario están bien y están listas para iniciar sesión :

if (isset($_REQUEST['redirect_to'])){
    wp_redirect($_REQUEST['redirect_to']);
    // wp_redirect() does not exit automatically, and should almost always be followed by a call to exit;
    exit;

} else {
    wp_redirect(get_bloginfo('url') . '/groups/');
    exit;
}

Muchas gracias por su ayuda, he votado a todos!

    
respondido por el Javier Villanueva 30.04.2011 - 18:41
15

Puedes hacerlo fácilmente. Solo necesitas especificar un parámetro de redireccionamiento. Si está utilizando un enlace de inicio de sesión en la página de inicio para ir a la página de inicio de sesión, entonces la solución de @ sisir es correcta.

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"] ); ?>

Si está utilizando un formulario personalizado en la página principal, dentro de <form> , asegúrese de completar un campo oculto con la url para redireccionar

<input type="hidden" name="redirect_to" value="<?php echo $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; ?>" />

Y si está utilizando wp_login_form() para generar el formulario, complete un parámetro - enlace

<?php
$args = array(
        'echo' => true,
        'redirect' => site_url( $_SERVER['REQUEST_URI'] ), 
        'form_id' => 'loginform',
        'label_username' => __( 'Username' ),
        'label_password' => __( 'Password' ),
        'label_remember' => __( 'Remember Me' ),
        'label_log_in' => __( 'Log In' ),
        'id_username' => 'user_login',
        'id_password' => 'user_pass',
        'id_remember' => 'rememberme',
        'id_submit' => 'wp-submit',
        'remember' => true,
        'value_username' => NULL,
        'value_remember' => false );

wp_login_form( $args );
?>

Cambie otros parámetros según lo que tenga o necesite.

    
respondido por el Ashfame 30.04.2011 - 12:43
6

Intente pasar the_permalink() como el argumento $redirect :

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        wp_redirect( the_permalink() );
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

EDITAR:

Lo sentimos, malinterpreté tu pregunta originalmente. Prueba esto:

function restrict_access_if_logged_out(){
    if (!is_user_logged_in() && !is_home()){
        $redirect = home_url() . '/wp-login.php?redirect_to=' . urlencode( $_SERVER['REQUEST_URI'] );
        wp_redirect( $redirect );
        exit;
    }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

También tenga en cuenta: el uso adecuado de wp_redirect() generalmente requiere agregar exit; , que he agregado a mi segundo ejemplo.

    
respondido por el Chip Bennett 30.04.2011 - 05:42
2

este es mi código que utilizo la gente para dirigir a la página de inicio de sesión de wp. Luego, al iniciar sesión, volvieron a donde estaban. Pero no es la página de inicio, sino la página de inicio de sesión de wordpress donde configuro el inicio de sesión personalizado.

<?php echo wp_login_url( $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]) ?>

Es posible que desee investigar con. Normalmente, obtendrás la url actual de un usuario mediante $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]

    
respondido por el Sisir 30.04.2011 - 10:43
0

El login_redirect filter hook es una solución más completa y efectiva aquí. De esta manera, puede ofrecer diferentes rutas de redireccionamiento para diferentes niveles de usuarios, o mantener la URL de redireccionamiento en el caso de un error al iniciar sesión (es decir, una contraseña incorrecta).

function login_redirect( $redirect_to, $request, $user ){
  if(isset($_REQUEST['redirect_to'])){
    return $_REQUEST['redirect_to'];
  }
  return admin_url();
}
add_filter( 'login_redirect', 'login_redirect', 10, 3 );

function restrict_access_if_logged_out(){
  if (!is_user_logged_in() && !is_home()){
    $redirect = home_url() . '?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]);
    wp_redirect( $redirect );
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );
    
respondido por el Matt 12.08.2014 - 17:24
0

No ha funcionado ninguna de tus respuestas, pero solo ha añadido una pequeña cosa, ¡ha funcionado! Aquí mi código:

function login_redirect( $redirect_to, $request, $user ){
  if(isset($_REQUEST['redirect_to'])){
    return $_REQUEST['redirect_to'];
  }
  return admin_url();
}
add_filter( 'login_redirect', 'login_redirect', 10, 3 );

function restrict_access_if_logged_out(){
  if (!is_user_logged_in() && !is_home()){
    $redirect = home_url() . '/wp-login.php?redirect_to=' . esc_url($_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]));
    wp_redirect( $redirect );
    exit;
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

Solo agregué /wp-login.php en comparación con la respuesta de @ Matt, pero para mí ha sido la clave. ¡Espero que ayude! :)

** EDITAR:

Detecté un ERROR cuando estás FUERZA wordpress para navegar en HTTPS. Este método no funciona porque la redirección está en HTTP. Para solucionar el problema he cambiado la función. Este es el resultado:

function restrict_access_if_logged_out(){
  global $wp;
  $protocol='http';
  if (isset($_SERVER['HTTPS']))
    if (strtoupper($_SERVER['HTTPS'])=='ON')
      $protocol='https';
  if (!is_user_logged_in() && !is_home() && ($wp->query_vars['pagename'] != 'downloads') ){
    $redirect = home_url() . "/wp-login.php?redirect_to= $protocol://" . $_SERVER["HTTP_HOST"] . urlencode($_SERVER["REQUEST_URI"]);
    wp_redirect( $redirect );
    exit;
  }
}
add_action( 'wp', 'restrict_access_if_logged_out', 3 );

Verifico el protocolo y luego borre ' esc_url ' y agregué el protocolo correcto: $protocol:// . También he cambiado el "" .

Estoy basado en esta página .

    
respondido por el Neil 23.05.2017 - 14:40
0

Sé que es muy tarde, pero publiqué una publicación sobre cómo hacerlo exactamente si alguna gente futura encuentra esto y lo necesita:

enlace

    
respondido por el user90810 17.03.2016 - 22:02

Lea otras preguntas en las etiquetas