wake-up-neo.com

Aktion wp_login_failed funktioniert nicht, wenn nur ein Feld ausgefüllt ist

Ich habe im Frontend ein Anmeldeformular mit wp_login_form() erstellt. In meiner functions.php Datei habe ich eine Aktion hinzugefügt, um die Weiterleitung zu /wp-login.php zu verhindern, falls die Anmeldung mit fehlschlug

add_action ('wp_login_failed',….

Wie sich herausstellt, funktioniert die Aktion nur, wenn die Felder Benutzername und Kennwort ausgefüllt sind. Wenn eines davon leer bleibt, werde ich trotzdem zu wp-login.php umgeleitet.

Gibt es eine Möglichkeit zu prüfen, ob beide Felder ausgefüllt sind, um die Weiterleitung zu verhindern?

Vielen Dank

Julianisch

3
hellojst

Fügen Sie diesen Filter hinzu, um zu ändern, wie leere Benutzernamen/Passwörter behandelt werden:

add_filter( 'authenticate', 'custom_authenticate_username_password', 30, 3);
function custom_authenticate_username_password( $user, $username, $password )
{
    if ( is_a($user, 'WP_User') ) { return $user; }

    if ( empty($username) || empty($password) )
    {
        $error = new WP_Error();
        $user  = new WP_Error('authentication_failed', __('<strong>ERROR</strong>: Invalid username or incorrect password.'));

        return $error;
    }
}

Und dann funktioniert Ihre ursprüngliche Weiterleitung auf wp_login_failed auch mit leerem Benutzernamen/Passwort.

3
Jake

Das Problem liegt bei der Funktion wp_authenticate() (gefunden in der Datei pluggable.php)

Sie haben 2 Möglichkeiten.

  • hacke den WordPress-Kern (nicht empfohlen!)
  • schreiben Sie Ihr eigenes Plugin, das wp_authenticate() überschreibt (dies löscht lediglich einige Zeichen in einer if -Anweisung).
1
user18485