Как отобразить "ошибка входа" и "потерянный пароль" на моей странице шаблона?


Я предоставляю интерфейс входа в систему в шаблоне, используя функцию wp_login_form. Он довольно аккуратно обрабатывает перенаправление после входа и выхода из системы! Но если имя пользователя/пароль не совпадают или отсутствуют, пользователь перенаправляется на страницу входа администратора с ошибкой shaky js. Также то же самое происходит, когда я пытаюсь сбросить пароль, это приводит меня на внутреннюю страницу, где я должен ввести свой адрес электронной почты для сброса пароля. Я хочу показать оба этих действия по моему шаблону. Есть ли способ, которым я мог бы это сделать?

Заранее спасибо за любую помощь.

Author: Rutwick Gangurde, 2011-09-24

1 answers

Да, это возможно. Для этого вам нужно создать три фильтра.

Административные материалы внутри класса

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

Сначала нам нужно отфильтровать вывод функции wp_login_url(), которая используется wp_login_form() в атрибуте forms action.

Посмотрите на метод modifyLoginUrl(). Здесь мы храним URL страницы login внутри переменной $loginUrl. Эта страница должна существовать внутри WordPress, поэтому сначала создайте ее.

Далее нам понадобится фильтр для функции wp_lostpassword_url() и wp_register(). Это в основном тот же. URL-адрес сайта хранится внутри переменной $lostpwUrl и $registerUrl.

И последнее, но не менее важное: вы должны вызвать класс на правильном крючке действия. Для тем это должно быть after_setup_theme, а для плагинов вы можете использовать plugins_loaded.

Темы/ functions.php

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

Плагины

add_action('plugins_loaded', 'wpse29338_admin_init');
function wpse29338_admin_init() {
    WPSE29338_Admin::setup();
}
 9
Author: Roman, 2011-09-24 15:01:45