Wie zeige ich "Anmeldefehler" und "Passwort verloren" auf meiner Vorlagenseite?

10

Ich stelle die Front-End-Anmeldung in einer Vorlage mit der Funktion wp_login_form bereit. Es behandelt die Umleitung nach dem An- und Abmelden ziemlich ordentlich! Wenn jedoch der Benutzername / das Kennwort nicht übereinstimmt oder nicht vorhanden ist, wird der Benutzer mit dem wackeligen js-Fehler zur Administrator-Anmeldeseite weitergeleitet. Das Gleiche gilt auch, wenn ich versuche, das Passwort zurückzusetzen. Ich gehe zur Backend-Seite von me, auf der ich meine E-Mail-Adresse eingeben muss, um das Passwort zurückzusetzen. Ich möchte beide Aktivitäten in meiner Vorlage anzeigen. Gibt es eine Möglichkeit, dies zu tun?

Vielen Dank für jede Hilfe im Voraus.

Rutwick Gangurde
quelle

Antworten:

9

Ja es ist möglich. Hierfür müssen Sie drei Filter erstellen.

Admin-Zeug in einer Klasse

class WPSE29338_Admin {
    public static function setup() {
        add_filter('login_url', array(__CLASS__, 'modifyLoginURL'), 10, 2);
        add_filter('lostpassword_url', array(__CLASS__, 'modifyLostPasswordURL'), 10, 2);
        add_filter('register', array(__CLASS__, 'modifyRegisterURL'));
    }

    public static function modifyLoginURL($loginUrl, $redirect = '') {
        $loginUrl = site_url('login'); // Link to login URL

        if(!empty($redirect)) {
            $loginUrl = add_query_arg('redirect_to', urlencode($redirect), $loginUrl);
        }

        return $loginUrl;
    }

    public static function modifyLostPasswordURL($lostpwUrl, $redirect = '') {
        $lostpwUrl = wp_login_url() . '#lostpassword'; // Link to lostpassword URL

        if(!empty($redirect)) {
            $lostpwUrl = add_query_arg('redirect_to', urlencode($redirect), $lostpwUrl);
        }

        return $lostpwUrl;
    }

    public static function modifyRegisterURL($registerUrl) {
        if(!is_user_logged_in()) {
            if (get_option('users_can_register')) {
                $registerUrl = '<a href="' . wp_login_url() . '#register" class="btn">' . __('Register') . '</a>'; // Link to register URL
            } else {
                $registerUrl = '';
            }
        }

        return $registerUrl;
    }
}

Zuerst müssen wir die Ausgabe der Funktion zum Filtern , wp_login_url()die verwendet wird , indem wp_login_form()in dem Formen - actionAttribute.

Schauen Sie sich die Methode an modifyLoginUrl(). Hier speichern wir die URL der Seite loginin der Variablen $loginUrl. Diese Seite muss in WordPress vorhanden sein, erstellen Sie sie also zuerst.

Als nächstes brauchen wir einen Filter für die Funktion wp_lostpassword_url()und wp_register(). Es ist im Grunde das gleiche. Die URL der Site wird in der Variablen $lostpwUrlund gespeichert $registerUrl.

Zu guter Letzt müssen Sie die Klasse am richtigen Aktionshaken aufrufen. Für Themen sollte dies sein after_setup_themeund für Plugins können Sie verwenden plugins_loaded.

Themes / functions.php

add_action('after_setup_theme', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}

Plugins

add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}
Rofflox
quelle
Es tut mir leid, das zu stoßen, aber ich würde es gerne tun, aber ich kann es nicht herausfinden! Was sollte ich in dem von Ihnen angegebenen Code ändern?
Bram Vanroy
Bram, wenn Sie ein benutzerdefiniertes Thema erstellen, fügen Sie den gesamten ersten und zweiten Codeblock in Ihre Themenfunktionsdatei ein. Wenn Sie ein Plugin erstellen, fügen Sie den ersten und dritten Codeblock in Ihre Plugin-Datei ein. Es sieht so aus, als müssten Sie möglicherweise nur die 9. Zeile der Klasse ändern, in der steht $loginUrl = site_url('login'); // Link to login URL. Ändern Sie einfach "Anmelden" so, dass es mit dem Slug der Anmeldeseite übereinstimmt, die Sie verwenden möchten. Wenn Rofflox keinen Syntaxfehler gemacht hat, den ich nicht sehe, sieht es so aus, als würde es wunderbar funktionieren.
Jen
@guiniveretoo Danke für deine Antwort! Das Problem ist, dass ich mit einem Dropdown-Formular arbeite, auf das von jeder Seite der Website aus zugegriffen werden kann. Es ist also kein definitiver Slug möglich, da sich die Leute von jeder Seite aus anmelden können ... Also, was soll ich dort platzieren?
Bram Vanroy
1
Bram - Wordpress benötigt eine Anmelde-URL, damit sie bei einem Benutzerfehler oder ähnlichem ihr Passwort zurücksetzen oder sich für ein Konto anmelden können. Durch das Festlegen einer Anmelde-URL wird diese Seite bereitgestellt. Ich habe genau dieses Setup letztes Jahr mit einem Projekt durchgeführt: Ein Javascript-Anmeldefeld, das mit dem Anmeldeformular angezeigt wurde. Wenn sie ihre Informationen korrekt eingeben, werden sie an wp-admin gesendet. Andernfalls gelangen sie auf die benutzerdefinierte Anmeldeseite, um es entweder erneut zu versuchen oder ihr Kennwort zurückzusetzen.
Jen