Redirección de inicio de sesión a la página anterior

3 oct 2012, 08:23:55
Vistas: 18.2K
Votos: 9

Tengo una página de inicio de sesión personalizada en http://netballscoop.com/log-in/

Cuando introduces el nombre de usuario y contraseña, te redirige perfectamente a la página anterior en la que estabas. Al hacer clic en Cerrar sesión, también te redirige a la misma página. Todo esto funciona bien.

Si dejas el nombre de usuario/contraseña en blanco o hay un error, te lleva a wp-login. Para evitarlo, he usado el código de https://stackoverflow.com/questions/11477107/redirect-away-from-login-page

add_action('login_redirect', 'redirect_login', 10, 3);
function redirect_login($redirect_to, $url, $user) {
if($user->errors['empty_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['empty_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['invalid_username']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else if($user->errors['incorrect_password']){
    wp_redirect(get_bloginfo('url').'/log-in-error/');
}
else{
    wp_redirect(get_bloginfo('url').'/log-in');
}
exit;
}

Esto funciona genial para los errores de inicio de sesión en mi sitio web. Pero ahora la redirección después del login lleva al usuario a http://netballscoop.com/members/testing (El usuario 'Testing' es llevado a su página de perfil de BuddyPress).

¿Cómo puedo redirigir al usuario a la página anterior cuando inician sesión?

2
Comentarios

Mi respuesta publicada anteriormente malinterpretó un poco tu pregunta, así que la eliminé. ¿Ya has intentado usar la acción wp_login? Es una de las últimas que se ejecutan al iniciar sesión exitosamente. La usé en un sitio que construí recientemente con BuddyPress y funcionó perfectamente.

Eric Allen Eric Allen
4 oct 2012 07:39:18

Hola @allenericr, para ser honesto no sabría por dónde empezar con eso. Mi conocimiento de php/funciones/etc es muy limitado. ¿Serías capaz de compartir lo que estás usando para ese sitio si consideras que es una mejor alternativa?

Tanya Tanya
4 oct 2012 08:07:50
Todas las respuestas a la pregunta 1
2
11

Puedes filtrar la función login_redirect de la siguiente manera, adáptala según tus necesidades.

add_filter('login_redirect', 'redirect_previous_page', 10, 1);

function redirect_previous_page( $redirect_to ){
    global $user;

    $request = $_SERVER["HTTP_REFERER"];

    if ( in_array( $user->roles[0], array( 'administrator') ) ) {

        return admin_url();

    } elseif ( in_array( $user->roles[0], array( 'subscriber') ) ) {

        return $request;
    } 

    return $redirect_to;
}

Actualización 1:

El código (arriba) ha sido modificado y probado - funciona.

Actualización 2: (por Tanya)

Conversé con @userabuser y llegamos a esta respuesta que funciona.

// Redirigir a la página anterior 
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');

Nota importante:

Resulta que Tanya estaba usando el plugin de foros bbPress, por lo tanto, a pesar del fragmento original que usa,

add_filter('login_redirect', 'function_name'); //el filtro estándar de la API de WordPress

el cual es correcto y funciona bajo condiciones "normales" de WordPress, en este caso estaba siendo sobrescrito en prioridad por el filtro de bbPress,

add_filter('bbp_user_login_redirect_to', 'function_name'); //el filtro de la API de bbPress

Ahora, dado que la documentación en el sitio web de bbPress.org que detalla estas acciones y hooks está pobremente organizada y algo incompleta (hasta donde puedo ver), sugiero que (cualquiera) que busque más información sobre qué hooks dónde y qué filtra qué, debería echar un vistazo a este recurso aquí que proporciona una lista detallada de hooks y filtros.

Notas: (misceláneas)

Cambia 'subscriber' para que coincida con el rol que estás usando para ese tipo de usuario. También puede aceptar múltiples roles ya que está en forma de array.

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')
4 oct 2012 09:54:40
Comentarios

@Tanya Edité el código para incluir los parámetros opcionales. $user puede no ser accesible. Prueba esta actualización y dime.

Adam Adam
4 oct 2012 12:10:07

@Tanya Hola Tanya, gracias por la actualización. Mientras tanto, ¿podrías borrar tus últimos comentarios (haz clic en la pequeña x al pasar el cursor) para limpiar el hilo de comentarios? Yo también eliminaré mis comentarios irrelevantes.

Adam Adam
12 oct 2012 09:40:42