У WordPress ви можете створювати своїх користувачів і свої власні ролі, причому зробити це можна навіть програмно, тобто ви можете створити форму реєстрації, щоб ваші відвідувачі могли зареєструватися на вашому сайті і увійти в зону, доступну тільки для членів сайту.
Якщо ви дозволили своїм відвідувачам реєструватися в якості користувачів на вашому сайті, то у них буде доступ до вашої панелі адміністратора. Немає нічого складного в тому, щоб поставити призначені для користувача ролі - в результаті користувачі не зможуть нічого зробити в панелі адміністратора, однак це не найкращий підхід до відвідувачів.
Найкраще створити нову форму входу, використовуючи вбудований в WP призначений для користувача менеджер, і перенаправляти успішно здійснені входи в будь-яку іншу область, відмінну від панелі адміністратора WordPress.
У цьому посібнику ми подивимося на те, як створити нову форму входу для користувачів, яка буде перенаправляти їх в різні області.
Обмежуємо доступ до панелі адміністратора тільки для адміністраторів
У файл functions.php нашої WP теми додамо наступний код, який дозволить нам блокувати доступ до області адміністратора:
Код здійснює перевірку, чи є користувач адміністратором, і якщо немає, то WordPress автоматично перенаправить людини назад на головну сторінку.
Тепер, коли у нас є обмежений доступ до області адміністратора, ми можемо створити нову форму входу для всіх інших користувачів в менеджері користувачів WordPress.
Створюємо нову сторінку входу
Для початку нам треба створити новий шаблон сторінки входу для нашої теми, що дозволить нам створити нову сторінку входу в WordPress і зв'язати її з даними шаблоном.
Створюємо новий PHP-файл в темі і додаємо в нього наступний код:
Тепер, якщо ви перейдете до WordPress і створите нову сторінку, ви зможете зв'язати цю сторінку з даними шаблоном.
Нам потрібно, щоб дана сторінка виглядала так само, як і всі інші сторінки в темі, тому ми додамо хедер, футер і сайдбар.
З даною структурою сторінка буде виглядати, як і будь-яка інша в темі, і тепер ми можемо додати до неї форму входу. На щастя, в WordPress існує функція, яка створює форму входу на сторінці.
Функція function is wp_login_form () отримує один параметр, який є масивом аргументів, що використовуються для зміни поведінки форми.
Ось аргументи, які ви можете передавати в функцію форми, і їх стандартні значення:
Ви можете змінювати будь-які параметри на свій розсуд для форми входу, в даному випадку ми просто змінимо URL перенаправлення, щоб коректно виконаний вхід переносив користувачів в спеціальну область сайту, доступну тільки для його членів.
При правильному вході WordPress отримає URL сторінки, доступною тільки для членів сайту, використовуючи функції get_permalink () і get_page ().
Все, що нам потрібно - це створити нову сторінку для довільної форми входу, яка перенесе ваших користувачів в спеціальну область сайту замість панелі адміністратора. Ось повний код сторінки:
Проблеми зі створенням своєї власної сторінки входу
Створення своєї власної сторінки входу в WordPress вимагає більш складних дій, ніж просто використання функції wp_login_form (), яка створить сторінку входу і дозволить вам успішно входити в WordPress. Проблема з'являється в тому випадку, якщо у вас є невдалі спроби входу.
Вам потрібно обробити подія, яке відбудеться, коли користувач невірно введе логін, невірно введе юзернейм, пароль, або нічого не введе в форму. У кожному з таких сценаріїв користувач повинен бути перекинутий назад до поточної формі входу, і ви повинні вивести на екран повідомлення про те, що вхід не був здійснений.
Якщо ви використовуєте функцію wp_login_form () і у вас є невдала спроба входу, ви завжди будете переноситися до форми входу WordPress wp-login.php. Це не дуже зручно для користувачів, яким потрібно увійти в область, доступну для членів сайту. Таким чином, нам потрібно додати кілька додаткових функцій в functions.php, щоб переконатися в тому, що дані види поводжень обробляються коректно.
Невдала спроба входу
Для початку нам потрібно обробити подія, яка відбудеться, якщо була здійснена невдала спроба входу, тобто якщо був введений некоректний логін або пароль і ви не ввійшли в WordPress.
У WordPress є дія wp_login_failed, за допомогою якого ви можете прив'язати функцію для обробки невдалої спроби входу. Воно буде використовуватися тільки тоді, коли користувач ввів некоректний логін і пароль. Якщо користувач не ввів логін або пароль, то процес входу не дійде до зазначеної стадії.
Як тільки спроба входу буде невдалою, нам потрібно отримати URL сторінки, з якої ми перейшли, і переконатися в тому, що це не стандартна сторінка wp-login.php, після чого ми можемо додати строковий параметр невдалого входу і перенаправити з цим параметром на форму входу.
Додамо наступний код до файлу functions.php для зворотного редиректу на довільну сторінку входу при невдалій спробі введення даних:
Порожній логін і пароль
Якщо ви не ввели пароль або логін на довільній сторінці входу, ви будете перенаправлені назад до стандартної сторінці входу WordPress, що не дуже добре, оскільки це заплутає ваших користувачів. Таким чином, нам знадобиться підчепити іншу функцію до іншої дії - в даному випадку ми будемо використовувати дію authenticate.
На даному етапі ми можемо перевірити логін і пароль, переконатися в тому, що вони не порожні, і в іншому випадку перенаправити назад з рядком невдалого входу.
Додамо наступний код в файл functions.php, щоб переконатися, що логін і пароль не є порожніми.
Тепер, якщо користувач нічого не введе в відповідні поля форми, ми отримаємо рядок, що вказує на некоректний вхід.
Висновок повідомлення про невдалий вході
Коли ми перенаправляємо користувачів назад на сторінку входу, у нас є рядок? Login = failed. Перевіривши її наявність, ми можемо вивести на екран повідомлення користувачу.
Повернемося до нашого шаблоном сторінки входу і додамо до нього наступний код:
Код вище дозволить усунути безліч різних проблем, з якими ви зіткнетеся при створенні своїх власних сторінок входу. Тепер ви можете створити свої власні області для членів сайту і дозволити користувачам входити в них.