Redirección de inicio de sesión a la página anterior
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?

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')

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