Як заборонити користувача WordPress

Мене кілька днів тому попросили створити систему, яка б заборонила користувачеві WordPress встановлювати. Тому я створив простий плагін і хотів поділитися з вами основами цього плагіна. У цьому підручнику ми будемо висвітлювати фільтри WordPress, дії, управління стовпцями користувачів та ще деякі чудові речі.


Крок 1: Створіть плагін

Ще раз, ось це дуже складно, все, що вам потрібно зробити, – це створити нову папку з “wp-content / plugins” під назвою “ban-users”. У цій папці створіть новий файл під назвою “ban-users.php”, відкрийте його та вставіть цей код:

Крок 2. Додайте прапорець на сторінку профілю користувачів

Перше, що нам потрібно зробити - це додати прапорці на кожній сторінці видання профілю користувача. Якщо ви встановите цей прапорець, він зберігатиме мета-опцію користувача, яка вказуватиме, що користувачеві більше не дозволяється входити на ваш веб-сайт.

Ось код:

/ **
* Адміністратор ініт
*
* @ доступ громадськості
* @since 1.0
* @return void
* /
функція rc_admin_init () {

// Редагувати профіль користувача
добавлення ('edit_user_profile', 'rc_edit_user_profile');
добавлення ('edit_user_profile_update', 'rc_edit_user_profile_update');

}
добавлення ('admin_init', 'rc_admin_init');

Цей код просто створює виклик до функції, яку ми маємо створити зараз. Ця функція додасть прапорець на сторінку профілю користувачів.

/ **
* Додає користувацький прапорець на сторінку видання користувача
*
* @ доступ громадськості
* @since 1.0
* @return void
* /
функція rc_edit_user_profile () {
if (! current_user_can ('edit_users')) {
повернення;
}

глобальний $ user_id;

// Користувач не може відключити себе
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
якщо ($ current_user_id == $ user_id) {
повернення;
}

// Перевірте, чи включено
$ check = перевірено (get_user_option ('rc_banned', $ user_id, false));

// Показувати прапорець
відлуння '
Заборона користувача
'; }

Тепер нам потрібно мати функцію, яка збереже в базі даних значення прапорця:

/ **
* Збережіть власну прапорець
*
* @ доступ громадськості
* @since 1.0
* @return void
* /
функція rc_edit_user_profile_update () {

if (! current_user_can ('edit_users')) {
повернення;
}

глобальний $ user_id;

// Користувач не може відключити себе
$ current_user = wp_get_current_user ();
$ current_user_id = $ current_user-> ID;
якщо ($ current_user_id == $ user_id) {
повернення;
}

// Блокування
if (isset ($ _POST ['rc_ban']) && $ _POST ['rc_ban'] = 'on') {
rc_ban_user ($ user_id);
} else {// Розблокувати
rc_unban_user ($ user_id);
}

}

Як ви бачите, ця нова функція використовує дві інші функції: rc_ban_users () та rc_unban_users (). Їх імена досить явні, перший збереже в базі даних той факт, що користувач заборонений, другий розблокує користувачів.

Крок 3. Заборона користувачів

Настав час створити функцію rc_ban_users (). У цій функції нам потрібно перевірити, чи значення вже збережене, а якщо ні, нам не потрібно зберігати значення. Ось чому я викликаю функцію, яку я опишу пізніше: rc_is_user_banned ():

/ **
* Заборонити користувача
*
* @ доступ громадськості
* @since 1.0
* @return void
* /
функція rc_ban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

// Оновити статус
if (! $ old_status) {
update_user_option ($ user_id, 'rc_banned', true, false);
}
}

Крок 4: Скасувати заборону користувачів

Наступна функція є протилежною тій, що ми тільки що створили: ми повинні надати можливість "скасувати заборону" користувачів:

/ **
* Скасувати заборону користувача
*
* @ доступ громадськості
* @since 1.0
* @return void
* /
функція rc_unban_user ($ user_id) {

$ old_status = rc_is_user_banned ($ user_id);

// Оновити статус
якщо ($ old_status) {
update_user_option ($ user_id, 'rc_banned', false, false);
}
}

Крок 5: Заборонено користувачеві?

У rc_ban_users () та rc_unban_users () ми побачили, що ми використовуємо функцію rc_is_user_banned (), щоб перевірити, заборонено чи ні. Давайте створимо його:

/ **
* Перевіряє, чи користувачеві вже заборонено
*
* @ доступ громадськості
* @since 1.0
* @return void
* /
функція rc_is_user_banned ($ user_id) {
повернути get_user_option ('rc_banned', $ user_id, false);
}

В основному, ця функція просто повертає значення параметра, збереженого в rc_ban_users ().

На даний момент у нас на сторінці користувальницького видання з'явився новий прапорець, який повинен виглядати так:

ban_users_1

Останній крок - підключити функцію до форми входу, щоб уникнути заборонених користувачів входити в систему.

Крок 5: Уникайте заборонених користувачів для входу

Для цього нам потрібно використовувати фільтр за замовчуванням WordPress під назвою "wp_authenticate_user". До цього фільтра ми підключимо функцію під назвою "rc_authenticate_user ()". Ця функція використовуватиме WP_Error клас.

/ **
* Перевірте, чи користувач заблокований під час входу
*
* @ доступ громадськості
* @since 1.0
* @return void
* /
функція rc_authenticate_user ($ користувач) {

if (is_wp_error ($ user)) {
повернути $ user;
}

// Помилка повернення, якщо обліковий запис користувача заборонено
$ banned = get_user_option ('rc_banned', $ user-> ID, false);
якщо ($ заборонено) {
повернути новий WP_Error ('rc_banned', __ ('ПОМИЛКА: Цей обліковий запис користувача вимкнено. ',' Rc '));
}

повернути $ user;
}

Тепер нам просто потрібно додати фільтр:

add_filter ('wp_authenticate_user', 'rc_authenticate_user', 1);

Висновок

Ми створили плагін, який додає прапорець на сторінку видання профілю користувача. Ми використовували другу функцію для зберігання значення у прапорець і створюємо функцію для заборони користувача WordPress та іншої для розблокування користувача. Ми також створили невелику функцію, щоб перевірити, заборонено чи ні. І ми нарешті підключили функцію до фільтра "wp_authenticate_user", використовуючи клас за замовчуванням WP_Error WordPress.

Якщо вам сподобався цей підручник, вам сподобається премійна версія цього плагіна: User Access Manager.

Завантажте повний код на Github

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map