web-dev-qa-db-ger.com

Login Weiterleitung zur vorherigen Seite

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 befunden haben. Wenn Sie auf Abmelden klicken, werden Sie auf dieselbe Seite weitergeleitet. Das funktioniert also alles gut.

Wenn Sie den Benutzernamen/das Passwort leer lassen oder einen Fehler haben, werden Sie zum wp-Login geführt. Um dies zu verhindern, habe ich den Code von https://stackoverflow.com/questions/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. Aber jetzt führt Sie die Login-Weiterleitung zu http://netballscoop.com/members/testing (Der Benutzer 'Testing' wird auf die Profilseite seines BuddyPress-Mitglieds weitergeleitet).

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

8
Tanya

Sie können die login_redirect -Funktion 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 verwendete, daher trotz des Original-Snippets, das verwendet,

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

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

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

Da die Dokumentation auf der bbPress.org Website, die diese Aktionen und Hooks beschreibt, schlecht organisiert und (soweit ich das beurteilen kann) etwas unvollständig ist, schlage ich vor, dass (jeder) nach weiteren Informationen über was sucht hooks where und what filters what , schauen Sie sich diese Ressource hier an , die eine detaillierte Liste von Hooks und Filtern enthält.

Anmerkungen: (Verschiedenes)

Ändern Sie den 'subscriber' 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')
7
userabuser