WordPress-Weiterleitung nach Zurücksetzen des Passworts

10

Ich möchte in der Lage sein, get_bloginfo('url');nach dem Zurücksetzen des Passworts umzuleiten.

Aber ich kann für mein ganzes Leben keine einfache Antwort oder Funktion finden, um dies zu tun.

Weiß jemand, ob dies möglich ist?

Danke Josh

Joshc
quelle

Antworten:

9

Hier ist eine einfache Lösung. Ich bin dabei login_headerurl. Vielleicht gibt es einen besseren Haken dafür, aber es funktioniert. Fügen Sie dies in Ihre functions.php ein:

function wpse_lost_password_redirect() {

    // Check if have submitted 
    $confirm = ( isset($_GET['checkemail'] ) ? $_GET['checkemail'] : '' );

    if( $confirm ) {
        wp_redirect( home_url() ); 
        exit;
    }
}
add_action('login_headerurl', 'wpse_lost_password_redirect');

Was es tut, läuft es weiter login_headerurlund prüft auf den GET-Parameter "checkedmail", den Sie erhalten, nachdem Sie einen gültigen Benutzernamen oder eine gültige E-Mail gesendet haben. Dann leite ich mit der awsome-Funktion wp_redirect zur home_url um .

UPDATE nach Kommentar

Wenn Sie den Benutzer nach dem Senden eines neuen Passworts umleiten möchten, müssen Sie nur den Hook password_reset verwenden. Hier ein Beispiel:

function wpse_lost_password_redirect() {
    wp_redirect( home_url() ); 
    exit;
}
add_action('after_password_reset', 'wpse_lost_password_redirect');
Pontus Abrahamsson
quelle
Hallo Pontus, vielen Dank für Ihre Antwort, ich bin mir sicher, dass dies für ein anderes Mal verwendet wird. Aber ich bin in der Tat nach der Umleitung, nachdem das neue Passwort selbst zurückgesetzt wurde, nicht nach der E-Mail / Benutzer-Übermittlung. Sehen Sie diesen Screenshot des Formulars, für das ich die Weiterleitung benötige ... i.imgur.com/x2IUQ0c.jpg - Danke
Joshc
Aaah, ich sehe, das ist tatsächlich einfacher als die Funktion zuvor. Siehe meine aktualisierte Antwort.
Pontus Abrahamsson
Oh Mann, diese beiden sind großartig !! Vielen Dank für das Teilen mit uns, es hat bei Treat funktioniert! Schön.
Joshc
2
Beachten Sie, dass die Verwendung der password_resetAktion ausgeführt wird, bevor das eigentliche Zurücksetzen des Kennworts durchgeführt wird. Dokumentation sagtFires before the user's password is reset.
Ejaz
2
Die zweite Version funktioniert nicht richtig, da das Passwort nicht geändert wird. Sie müssen das entfernen, exitda diese Aktion ausgeführt wird, bevor das Kennwort zurückgesetzt wird.
Jon Surrell
10

Die "richtige" Antwort funktioniert hier nicht, da die Aktion 'password_reset' ausgelöst wird, bevor das Passwort zurückgesetzt wird.

Ich habe die erste Antwort vor dem Update so geändert, dass sie funktioniert.

function wpse_lost_password_redirect() {

    // Check if have submitted
    $confirm = ( isset($_GET['action'] ) && $_GET['action'] == resetpass );

    if( $confirm ) {
        wp_redirect( home_url() );
        exit;
    }
}
add_action('login_headerurl', 'wpse_lost_password_redirect');

Bearbeiten: Ich hatte nicht genug Repräsentanten, um einen Kommentar abzugeben, daher poste ich dies als neue Antwort.

r00tAcc3ss
quelle
Dies sollte als Antwort gepostet werden. Gut gemacht.
Christine Cooper
Tolle Lösung - auch bei MS.
Q Studio
2

Ich kann nicht sehen, wie die Antwort "UPDATE nach Kommentar" funktioniert.

In der Dokumentation zum Hook 'password_reset' heißt es: "Wird ausgelöst, bevor das Kennwort des Benutzers zurückgesetzt wird."
Wenn Sie umleiten, wird das Beenden des Kennworts nicht geändert.

Da ich einen ähnlichen Bedarf hatte, entwickelte ich meine Lösung für das Problem. Wir antworten immer noch auf den Hook "password_reset", aber anstatt die Umleitung sofort durchzuführen, fügen wir einen Hook für den Filter "login_url" hinzu. In diesem Filter fügen wir die Weiterleitungen zur Startseite hinzu, nachdem sich der Benutzer angemeldet hat.

 add_action( "password_reset", "rngs_password_reset", 10, 2 );

/**
 * Implement "password_reset" for RNGS
 *
 * After a password reset has been performed we want the Log in link to redirect the user to the home url.
 * When we see this action being run we know that we should be filtering "login_url" to add the redirect the home page.
 * We don't filter "login_url" any other time. 
 *
 * @param WP_User $user - the user object
 * @param string $new_pass - the new password
 *  
 */
function rngs_password_reset( $user, $new_pass ) {
  add_filter( "login_url", "rngs_login_url", 10, 2 );
}

/**
 *  Implement "login_url" filter for RNGS
 *
 * Redirect the user to the home page after logging in
 *
 * @TODO - make this an option field that controls where the logged in user goes
 * @TODO - dependent upon role?
 * 
 * @param string $login_url - the original login_url which is not expected to include "redirect_to" or "reauth"
 * @param string $redirect - expected to be null/blank
 */
function rngs_login_url( $login_url, $redirect ) {
  $home_redirect = home_url();
  $login_url = add_query_arg('redirect_to', urlencode( $home_redirect ), $login_url);
  return( $login_url );
} 
wippend
quelle
1

Vielleicht fehlt mir etwas in der Frage, aber stimmt etwas mit der Verwendung des lostpassword_redirectFilters nicht?

add_filter( 'lostpassword_redirect', 'my_redirect_home' );

function my_redirect_home( $lostpassword_redirect ) {
    return home_url();
}

Mehr hier: https://codex.wordpress.org/Plugin_API/Filter_Reference/lostpassword_redirect

rsigg
quelle
Was Sie hier vermissen, lostpassword_redirectist der Filter für eine URL, zu der der Benutzer gehen wird, nachdem er auf die Forgot PasswordSchaltfläche geklickt hat. Dann setzt er sein Passwort tatsächlich zurück und wenn das neue Passwort festgelegt ist, benötigt das OP einen Filter- / Aktions-Hook (was wahrscheinlich ist after_password_reset)
dev_masta
-1

Rediret to ist eine WordPress-Funktion, für die Sie kein Plugin erstellen müssen. Fügen Sie einfach & redirect_to = die URL hinzu, und es funktioniert. Beispiel:

echo '<a href="'home_url().'/wp-login.php?action=lostpassword&amp;redirect_to='.get_bloginfo('url').'?sli=lost" rel="nofollow" title="Forgot Password">'Forgot Password'</a>';
Michael Rogers
quelle
2
Antworten sollten mehr als ein Code-Snippet sein. Bitte reichen Sie eine Bearbeitung ein und erklären Sie, warum dies funktionieren würde.
Gabriel