Login-Weiterleitung zur vorherigen Seite

8

Ich habe eine benutzerdefinierte Anmeldeseite unter http://netballscoop.com/log-in/.

Wenn Sie den Benutzernamen und das Passwort eingeben, werden Sie zur vorherigen Seite weitergeleitet, auf der Sie sich perfekt befanden. Wenn Sie auf Abmelden klicken, werden Sie zur gleichen Seite weitergeleitet. Das alles funktioniert also gut.

Wenn Sie den Benutzernamen / das Passwort leer lassen oder einen Fehler haben, gelangen Sie zur wp-Anmeldung. Um dies zu verhindern, habe ich den Code von /programming/11477107/redirect-away-from-login-page verwendet

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;
}

Dies funktioniert hervorragend bei Anmeldefehlern auf meiner Website. Jetzt führt Sie die Login-Weiterleitung zu http://netballscoop.com/members/testing (Der Benutzer 'Testing' wird auf die Profilseite seines BuddyPress-Mitglieds übertragen).

Wie leite ich den Benutzer zur vorherigen Seite um, wenn er sich anmeldet?

Tanya
quelle
Meine zuvor veröffentlichte Antwort hat Ihre Frage ein wenig falsch verstanden, sodass ich sie gelöscht habe. Haben Sie bereits versucht, sich an die Aktion wp_login zu binden ? Es ist eines der letzten, die bei erfolgreicher Anmeldung ausgelöst wurden. Ich habe es auf einer Site verwendet, die ich kürzlich mit BuddyPress erstellt habe, und es hat wie ein Zauber funktioniert.
Eric Allen
Hallo @allenericr, um ehrlich zu sein, würde ich nicht wissen, wo ich damit anfangen soll. Meine Kenntnisse über PHP / Funktionen / etc sind sehr begrenzt. Könnten Sie veröffentlichen, was Sie für diese Website verwenden, wenn Sie der Meinung sind, dass dies eine bessere Alternative ist?
Tanya

Antworten:

8

Sie können die login_redirectFunktion wie folgt filtern und an Ihre Bedürfnisse anpassen.

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;
}

Update 1:

Code (oben) wurde oben geändert und getestet - es funktioniert.

Update 2: (von Tanya)

Chattete mit @userabuser und fand diese Antwort, die funktioniert.

// Redirect to previous page 
remove_all_filters('login_redirect', 99);
add_filter('bbp_user_login_redirect_to', 'function_name');

Wichtige Notiz:

Es stellt sich heraus, dass Tanya das bbPress-Forum-Plugin verwendet hat, daher trotz des ursprünglichen Snippets, das verwendet,

add_filter('login_redirect', 'function_name'); //the standard WordPress API filter

Was korrekt ist und unter "normalen" WordPress-Bedingungen funktioniert , wurde in diesem Fall vom bbPress-Filter vorrangig überschrieben.

add_filter('bbp_user_login_redirect_to', 'function_name'); //the bbPress API filter

Da die Dokumentation auf der Website bbPress.org, in der diese Aktionen und Hooks detailliert beschrieben sind, schlecht organisiert und etwas unvollständig ist (soweit ich das beurteilen kann), empfehle ich (jedem), weitere Informationen darüber zu suchen, welche Hooks wo und welche Filter was benötigen Ein Blick auf diese Ressource hier, die eine detaillierte Liste der Hooks und Filter enthält.

Anmerkungen: (Sonstiges)

Ändern Sie 'subscriber'diese entsprechend der Rolle, die Sie für diesen Benutzertyp verwenden. Es kann auch mehrere Rollen annehmen, da es in Form eines Arrays vorliegt.

in_array( $user->roles[0], array( 'subscriber', 'role2, role3', 'etc')
Adam
quelle
@Tanya Code bearbeitet, um die optionalen Parameter einzuschließen. $ user ist möglicherweise nicht erreichbar. Probieren Sie dieses Update aus und lassen Sie es mich wissen.
Adam
@ Tanja Hallo Tanya, danke für das Update. Können Sie in der Zwischenzeit bitte Ihre letzten Kommentare löschen (klicken Sie beim Hover auf das kleine x), damit wir den Kommentarthread bereinigen können. Ich werde auch meine irrelevanten Kommentare entfernen.
Adam