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

10

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

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

Рутвик Гангурде
источник

Ответы:

9

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

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

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()в actionатрибуте forms .

Посмотрите на метод 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();
}
rofflox
источник
Извините, что ударился об этом, но мне бы очень хотелось это сделать, но я не могу этого понять! Что вы должны изменить в коде, который вы указали?
Брэм Ванрой
Брэм, если вы создаете собственную тему, поместите все первый и второй блоки кода в файл функций вашей темы. Если вы создаете плагин, поместите первый и третий блоки кода в ваш файл плагина. Похоже, единственное, что вам, возможно, придется изменить, - это 9-я строка класса, в которой написано $loginUrl = site_url('login'); // Link to login URL. Просто измените «логин», чтобы соответствовать фрагменту страницы входа, которую вы хотите использовать. Если Rofflox не допустил синтаксическую ошибку, которую я не вижу, похоже, это будет работать прекрасно.
Джен
@guiniveretoo Спасибо за ваш ответ! Проблема в том, что я работаю с раскрывающейся формой, к которой можно получить доступ с любой страницы сайта. Таким образом, нет никакой определенной возможности, потому что люди могут войти в систему с любой страницы ... Итак, что я должен поместить туда?
Брэм Ванрой
1
Брэму - Wordpress нужен URL для входа в систему, чтобы в случае ошибки пользователя или чего-то подобного им было куда пойти и сбросить пароль или зарегистрировать учетную запись. Настройка URL для входа обеспечивает эту страницу. Я сделал именно эту настройку с проектом в прошлом году: окно входа в javascript, которое появилось вместе с формой входа - если они правильно вводят свои данные, оно отправляет их wp-admin; в противном случае они попадают на пользовательскую страницу входа, чтобы либо повторить попытку, либо сбросить свой пароль.
Джен