Jak wyświetlić „błąd logowania” i „zapomniane hasło” na mojej stronie szablonu?

10

Podaję interfejs użytkownika w szablonie, używając funkcji wp_login_form. Obsługuje przekierowanie po zalogowaniu i wylogowuje się całkiem ładnie! Ale jeśli nazwa użytkownika / hasło są niezgodne lub nie istnieją, użytkownik zostaje przekierowany na stronę logowania administratora z błędnym błędem js. Podobnie jest w przypadku, gdy próbuję zresetować hasło, to zabiera mnie do strony zaplecza mnie, gdzie muszę wprowadzić adres e-mail, aby zresetować hasło. Chcę pokazać oba te działania na moim szablonie. Czy istnieje sposób, aby to zrobić?

Dzięki za pomoc z góry.

Rutwick Gangurde
źródło

Odpowiedzi:

9

Tak, to możliwe. W tym celu musisz utworzyć trzy filtry.

Administruj rzeczami w klasie

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

Najpierw musimy przefiltrować dane wyjściowe funkcji wp_login_url()używanej przez atrybut wp_login_form()form action.

Spójrz na metody modifyLoginUrl(). Tutaj przechowujemy adres URL strony loginw zmiennej $loginUrl. Ta strona musi istnieć w WordPress, więc utwórz ją najpierw.

Następnie potrzebujemy filtra dla funkcji wp_lostpassword_url()i wp_register(). Zasadniczo jest tak samo. Adres URL witryny jest przechowywany w zmiennej $lostpwUrli $registerUrl.

Wreszcie, musisz zadzwonić do klasy po odpowiednim haku akcji. W przypadku motywów tak powinno być, after_setup_themea dla wtyczek można użyć plugins_loaded.

Motywy / funkcje. Php

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

Wtyczki

add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}
rofflox
źródło
Przepraszam, że wpadłem na to, ale chciałbym to zrobić, ale nie mogę tego rozgryźć! Co w podanym przeze mnie kodzie powinienem zmienić?
Bram Vanroy
Bram, jeśli tworzysz niestandardowy motyw, umieść wszystkie pierwsze i drugie bloki kodu w pliku funkcji motywu. Jeśli tworzysz wtyczkę, umieść pierwszy i trzeci blok kodu w pliku wtyczki. Wygląda na to, że jedyną rzeczą, którą możesz zmodyfikować, jest dziewiąta linia klasy, w której jest napisane $loginUrl = site_url('login'); // Link to login URL. Wystarczy zmienić „login”, aby pasował do informacji o stronie logowania, której chcesz użyć. Jeśli Rofflox nie popełni błędu, którego nie widzę, wygląda na to, że działałoby to pięknie.
Jen
@ guiniveretoo Dziękujemy za odpowiedź! Problem polega na tym, że pracuję z rozwijanym formularzem, do którego można uzyskać dostęp z dowolnej strony w witrynie. Tak więc nie ma określonego ślimaka, ponieważ ludzie mogą zalogować się z dowolnej strony ... Więc co mam tam umieścić?
Bram Vanroy
1
Bram - Wordpress potrzebuje adresu URL logowania, więc jeśli wystąpi jakiś błąd użytkownika lub podobny problem, będą mogli gdzieś zresetować hasło lub założyć konto. Ustawienie adresu URL logowania zapewnia tę stronę. Dokładnie taką konfigurację wykonałem w zeszłym roku: okno logowania javascript, które pojawiło się wraz z formularzem logowania - jeśli podadzą prawidłowe informacje, wysyła je do wp-admin; jeśli nie, kończą na niestandardowej stronie logowania, aby spróbować ponownie lub zresetować hasło.
Jen