Iniciar sesión redirigir a la página anterior

8

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

Cuando ingresas el nombre de usuario y la contraseña, te redirige a la página anterior en la que estabas perfectamente. Cuando haces clic en Cerrar sesión, te redirige a la misma página. Entonces todo esto funciona bien.

Si deja el nombre de usuario / contraseña en blanco o tiene un error, lo llevará a wp-login. Para evitar esto, he usado el código de /programming/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 muy bien para errores de inicio de sesión en mi sitio web. Pero ahora la redirección de inicio de sesión lo lleva a http://netballscoop.com/members/testing (El usuario 'Pruebas' se toma en la página de perfil de su miembro BuddyPress).

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

Tanya
fuente
Mi respuesta publicada anteriormente leyó mal su pregunta un poco, así que la eliminé , ¿ya ha intentado vincular la acción wp_login ? Es uno de los últimos disparados al iniciar sesión con éxito. Lo utilicé en un sitio que construí recientemente con BuddyPress y funcionó de maravilla.
Eric Allen
Hola @allenericr, para ser sincero, no sabría por dónde empezar con eso. Mi conocimiento de php / functions / etc es muy limitado. ¿Podría publicar lo que está utilizando para ese sitio si considera que es una mejor alternativa?
Tanya

Respuestas:

8

Puede filtrar la login_redirectfunción así, adaptarla según sus 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) se ha modificado y probado anteriormente, funciona.

Actualización 2: (por Tanya)

Charlé con @userabuser y se me ocurrió esta respuesta que funciona.

// Redirect to previous page 
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');

Nota IMPORTANTE:

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

add_filter('login_redirect', 'function_name'); //the standard WordPress API filter

que es correcto y funciona en condiciones "normales" de WordPress, en este caso se sobrescribió con prioridad por el filtro bbPress,

add_filter('bbp_user_login_redirect_to', 'function_name'); //the bbPress API filter

Ahora, dado que la documentación en el sitio web bbPress.org que detalla estas acciones y ganchos está mal organizada y algo incompleta (por lo que puedo decir), sugiero que (cualquiera) busque más información sobre qué ganchos dónde y qué filtros qué debe tomar Eche un vistazo a este recurso aquí que proporciona una lista detallada de ganchos y filtros.

Notas: (varios)

Cambie 'subscriber'para que coincida con el rol que está utilizando para ese tipo de usuario. También puede aceptar múltiples roles ya que está en forma de matriz.

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')
Adán
fuente
@Tanya Código editado para incluir los parámetros opcionales. $ user puede no ser accesible. Prueba esta actualización y avísame.
Adam
@ Tanya Hola Tanya, gracias por la actualización. Mientras tanto, ¿puede eliminar sus últimos comentarios (haga clic en la pequeña x al pasar el mouse) para que podamos limpiar el hilo de comentarios. También eliminaré mis comentarios irrelevantes.
Adam