Reindirizzamento al login alla pagina precedente in WordPress
Ho una pagina di login personalizzata all'indirizzo http://netballscoop.com/log-in/
Quando si inseriscono username e password, il sistema reindirizza perfettamente alla pagina precedente. Quando si clicca su Log Out, si viene reindirizzati alla stessa pagina. Tutto funziona correttamente.
Se si lascia vuoto il campo username/password o si commette un errore, il sistema porta a wp-login. Per evitare questo comportamento ho utilizzato il codice da 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;
}
Questo codice funziona perfettamente per gli errori di login sul mio sito. Tuttavia ora il redirect dopo il login porta all'indirizzo http://netballscoop.com/members/testing (l'utente 'Testing' viene portato alla sua pagina profilo BuddyPress).
Come posso reindirizzare l'utente alla pagina precedente quando effettua il login?

Puoi filtrare la funzione login_redirect
in questo modo, adattala secondo le tue esigenze.
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;
}
Aggiornamento 1:
Il codice (sopra) è stato modificato e testato - funziona.
Aggiornamento 2: (di Tanya)
Ho parlato con @userabuser e abbiamo trovato questa soluzione che funziona.
// Reindirizza alla pagina precedente
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');
Nota importante:
Si è scoperto che Tanya stava utilizzando il plugin bbPress forum, quindi nonostante lo snippet originale che utilizza,
add_filter('login_redirect', 'function_name'); //il filtro standard dell'API WordPress
che è corretto e funziona in condizioni "normali" di WordPress, in questo caso veniva sovrascritto in priorità dal filtro di bbPress,
add_filter('bbp_user_login_redirect_to', 'function_name'); //il filtro dell'API bbPress
Ora, poiché la documentazione sul sito bbPress.org che descrive queste azioni e hook è scarsamente organizzata e in qualche modo incompleta (per quanto ne so), suggerisco che (chiunque) cerchi ulteriori informazioni su quali hook dove e quali filtri cosa, dovrebbe dare un'occhiata a questa risorsa qui che fornisce un elenco dettagliato di hook e filtri.
Note: (varie)
Cambia 'subscriber'
per corrispondere al ruolo che stai utilizzando per quel tipo di utente. Può anche accettare più ruoli poiché è sotto forma di array.
in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')

@Tanya Ho modificato il codice per includere i parametri opzionali. $user potrebbe non essere accessibile. Prova questo aggiornamento e fammi sapere.
