Redirecționare la pagina anterioară după login în WordPress

3 oct. 2012, 08:23:55
Vizualizări: 18.2K
Voturi: 9

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ă?

2
Comentarii

Răspunsul meu anterior a interpretat puțin greșit întrebarea ta, așa că l-am șters. Ai încercat deja să folosești acțiunea wp_login? Este una dintre ultimele acțiuni declanșate la autentificarea cu succes. Am folosit-o pe un site pe care l-am construit recent cu BuddyPress și a funcționat perfect.

Eric Allen Eric Allen
4 oct. 2012 07:39:18

Salut @allenericr, să fiu sincer, nu aș ști de unde să încep cu asta. Cunoștințele mele despre php/funcții/etc sunt foarte limitate. Ai putea să postezi ce folosești pentru acel site dacă consideri că este o alternativă mai bună?

Tanya Tanya
4 oct. 2012 08:07:50
Toate răspunsurile la întrebare 1
2
11

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')
4 oct. 2012 09:54:40
Comentarii

@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.

Adam Adam
4 oct. 2012 12:10:07

@Tanya Bună Tanya, mulțumesc pentru actualizare. Între timp, poți să ștergi ultimele tale comentarii (apasă pe micul x care apare la hover) ca să putem curăța firul de discuții. Voi șterge și eu comentariile mele care nu sunt relevante.

Adam Adam
12 oct. 2012 09:40:42