Redirecționare la pagina anterioară după login în WordPress
Am o pagină personalizată de login la http://netballscoop.com/log-in/
Când completezi numele de utilizator și parola, te redirecționează perfect la pagina anterioară pe care ai fost. Când dai click pe Log Out, te redirecționează la aceeași pagină. Deci toate acestea funcționează bine.
Dacă lași câmpurile de utilizator/parolă goale sau apare o eroare, te va direcționa către wp-login. Pentru a preveni acest lucru am folosit codul de la 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;
}
Aceasta funcționează excelent pentru erorile de login pe site-ul meu. Dar acum redirecționarea după login te duce la http://netballscoop.com/members/testing (Utilizatorul 'Testing' este dus către pagina sa de profil BuddyPress).
Cum pot redirecționa utilizatorul către pagina anterioară când se loghează?

Puteți filtra funcția login_redirect
astfel, adaptați în funcție de nevoile dumneavoastră.
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;
}
Actualizare 1:
Codul (de mai sus) a fost modificat și testat - funcționează.
Actualizare 2: (de Tanya)
Am discutat cu @userabuser și am ajuns la acest răspuns care funcționează.
// Redirecționează către pagina anterioară
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');
Notă importantă:
Se pare că Tanya folosea pluginul de forum bbPress, deși fragmentul original care folosește,
add_filter('login_redirect', 'function_name'); //filtrul standard al API-ului WordPress
este corect și funcționează în condiții "normale" ale WordPress, a fost, în acest caz, suprascris în prioritate de filtrul bbPress,
add_filter('bbp_user_login_redirect_to', 'function_name'); //filtrul API-ului bbPress
Acum, deoarece documentația de pe site-ul bbPress.org care detaliază aceste acțiuni și hook-uri este prost organizată și oarecum incompletă (din câte am văzut), sugerez că (oricine) care caută mai multe informații despre ce hook-uri unde și ce filtrează ce, ar trebui să consulte această resursă aici care oferă o listă detaliată de hook-uri și filtre.
Note: (diverse)
Schimbați 'subscriber'
pentru a corespunde rolului pe care îl folosiți pentru acel tip de utilizator. Poate accepta și mai multe roluri, deoarece este sub forma unui array.
in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')

@Tanya Am editat codul pentru a include parametrii opționali. $user poate să nu fie accesibil. Încearcă această actualizare și spune-mi ce părere ai.
