Reindirizzamento al login alla pagina precedente in WordPress

3 ott 2012, 08:23:55
Visualizzazioni: 18.2K
Voti: 9

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?

2
Commenti

La mia risposta precedente aveva frainteso un po' la tua domanda, quindi l'ho eliminata. Hai già provato a utilizzare l'azione wp_login? È una delle ultime azioni attivate quando si effettua il login con successo. L'ho usata su un sito che ho realizzato di recente utilizzando BuddyPress e ha funzionato perfettamente.

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

Ciao @allenericr, sinceramente non saprei da dove iniziare con questo. La mia conoscenza di php/funzioni/ecc è molto limitata. Saresti in grado di pubblicare ciò che stai utilizzando per quel sito se ritieni che sia un'alternativa migliore?

Tanya Tanya
4 ott 2012 08:07:50
Tutte le risposte alla domanda 1
2
11

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')
4 ott 2012 09:54:40
Commenti

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

Adam Adam
4 ott 2012 12:10:07

@Tanya Ciao Tanya, grazie per l'aggiornamento. Nel frattempo, puoi cancellare i tuoi ultimi commenti (clicca la piccola x al passaggio del mouse) così possiamo pulire la discussione. Rimuoverò anch'io i miei commenti irrilevanti.

Adam Adam
12 ott 2012 09:40:42