Як відобразити "помилку входу" та "втрачений пароль" на моїй сторінці шаблону?


10

Я надаю вхідний шаблон у шаблоні за допомогою функції wp_login_form. Він обробляє перенаправлення після входу та виходу досить акуратно! Але якщо невідповідність імені користувача / пароля або його немає, користувач перенаправляється на сторінку входу адміністратора з хиткою помилкою js. Також це стосується випадку, коли я намагаюся скинути пароль, він переносить мене на сторінку "backback", де мені потрібно ввести електронний лист для скидання пароля. Я хочу показати обидві ці дії на своєму шаблоні. Чи є спосіб я це зробити?

Заздалегідь дякую за будь-яку допомогу.

Відповіді:


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атрибуті форм .

Подивіться на метод modifyLoginUrl(). Тут ми зберігаємо URL-адресу сторінки loginвсередині змінної $loginUrl. Ця сторінка повинна існувати всередині WordPress, тому спершу створіть її.

Далі нам потрібен фільтр для функції wp_lostpassword_url()та wp_register(). Це в основному те саме. URL-адреса сайту зберігається всередині змінної $lostpwUrlта $registerUrl.

І останнє, але не менш важливе, ви повинні зателефонувати в клас на правильному гачку дій. Для тем це має бути, after_setup_themeа для плагінів ви можете використовувати plugins_loaded.

Теми / функції.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-й рядок класу, де написано $loginUrl = site_url('login'); // Link to login URL. Просто змініть "логін", щоб відповідати слугу сторінки входу, яку ви хочете використовувати. Якщо Rofflox не допустив синтаксичної помилки, якої я не бачу, схоже, що це буде прекрасно працювати.
Джен

@guiniveretoo Дякуємо за вашу відповідь! Проблема полягає в тому, що я працюю зі спадною формою, до якої можна отримати доступ з будь-якої сторінки веб-сайту. Отже, певного слима неможливо, тому що люди можуть увійти з будь-якої сторінки ... Отже, що мені туди поставити?
Брам Ванрой

1
Bram - Wordpress потребує URL-адреси для входу, так що якщо є якась помилка користувача або подібне, їм десь потрібно перейти і скинути пароль або зареєструватися в обліковому записі. Встановлення URL-адреси входу надає цю сторінку. Я зробив саме цю налаштування з проектом минулого року: поле для входу в JavaScript, яке з’явилося з формою для входу, - якщо вони вводять їх інформацію правильно, він надсилає їх до wp-admin; якщо ні, вони опиняються на користувальницькій сторінці входу, або намагаються повторити або скинути пароль.
Джен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.