В повседневной работе с WordPress часто возникает задача очистки базы пользователей от заблокированных или неактивных аккаунтов. Такие пользователи могут занимать место в базе данных, замедлять работу сайта и создавать проблемы с безопасностью. В этой статье мы подробно рассмотрим, как определить заблокированные аккаунты, а также как удалить их с помощью кода и полезных плагинов.
Определение заблокированных аккаунтов в WordPress
Заблокированные аккаунты — это пользователи, которым запрещён доступ к сайту. В WordPress по умолчанию нет статуса "заблокирован", но чаще всего администраторы используют несколько подходов для блокировки:
- Удаление прав доступа или смена роли на "нет роли" (например, роль "none" или пустая роль).
- Использование мета-полей пользователя для отметки блокировки, например,
user_meta['blocked'] = true. - Плагины безопасности, которые добавляют собственные метки или статусы.
Для автоматизации удаления нам нужно однозначно определить таких пользователей. Если вы используете плагин, изучите, как он хранит метку блокировки. Если нет — можно внедрить собственную метку через user_meta.
Как найти заблокированных пользователей по мета-данным
Предположим, что мы помечаем заблокированных пользователей через мета-ключ wp1_blocked со значением 1. Для выборки таких пользователей используем WP_User_Query:
$args = [
'meta_key' => 'wp1_blocked',
'meta_value' => '1',
'fields' => 'ID',
'number' => -1 // получить всех
];
$blocked_users = new WP_User_Query($args);
Это вернёт массив ID заблокированных пользователей, с которыми можно работать дальше.
Удаление заблокированных аккаунтов через код
Для массового удаления создан простой скрипт, который можно запустить один раз в functions.php темы или отдельном плагине. Он перебирает всех заблокированных пользователей и удаляет их из базы данных.
function wp1_delete_blocked_users() {
$args = [
'meta_key' => 'wp1_blocked',
'meta_value' => '1',
'fields' => 'ID',
'number' => -1
];
$blocked_users = new WP_User_Query($args);
if (empty($blocked_users->results)) {
echo 'Заблокированных пользователей не найдено.';
return;
}
foreach ($blocked_users->results as $user_id) {
require_once(ABSPATH.'wp-admin/includes/user.php');
wp_delete_user($user_id);
echo "Пользователь #{$user_id} удалён.<br>";
}
}
// Для запуска вызовите функцию: wp1_delete_blocked_users();
Обязательно сделайте резервную копию базы перед массовым удалением!
Использование плагинов для управления и удаления заблокированных пользователей
Если вы не хотите писать код, можно использовать плагины, которые упрощают управление пользователями. Вот несколько полезных:
- User Blocker — позволяет временно или навсегда блокировать пользователей, с возможностью массовой разблокировки или удаления.
- Bulk User Delete — плагин для массового удаления пользователей по различным критериям, включая мета-поля.
- Clearfy Pro — профессиональный набор оптимизаций, в том числе для управления пользователями и безопасности.
Для удаления заблокированных пользователей через Bulk User Delete можно задать фильтр по мета-ключу wp1_blocked и удалить всех сразу через интерфейс.
Как добавить метку блокировки пользователю вручную и автоматически
Чтобы пометить пользователя как заблокированного, можно использовать следующий код, например, при необходимости блокировки через админку или программно:
function wp1_block_user($user_id) {
update_user_meta($user_id, 'wp1_blocked', '1');
}
Для снятия блокировки:
function wp1_unblock_user($user_id) {
delete_user_meta($user_id, 'wp1_blocked');
}
Можно интегрировать эти функции в кастомные админ-страницы или хуки, чтобы блокировать пользователя автоматически, например, при обнаружении подозрительной активности.
Добавление фильтра для запрета входа заблокированным пользователям
Чтобы заблокированные пользователи не могли войти, добавим проверку в хук authenticate:
add_filter('authenticate', 'wp1_blocked_user_prevent_login', 30, 3);
function wp1_blocked_user_prevent_login($user, $username, $password) {
if (is_wp_error($user)) {
return $user;
}
$blocked = get_user_meta($user->ID, 'wp1_blocked', true);
if ($blocked === '1') {
return new WP_Error('blocked_user', __('Ваш аккаунт заблокирован. Обратитесь к администратору.'));
}
return $user;
}
Так вы гарантируете, что заблокированные пользователи не смогут попасть в админку или на сайт.
Выводы и рекомендации
Удаление заблокированных пользователей — важная задача для поддержания чистоты и безопасности сайта на WordPress. Мы рассмотрели, как отмечать таких пользователей, как искать их в базе и удалять с помощью кода и плагинов. Если у вас большой сайт с множеством пользователей, рекомендуем автоматизировать процесс метки и периодически выполнять очистку.
Если нужна расширенная функциональность — попробуйте Clearfy Pro, который помогает управлять безопасностью и оптимизацией пользователей.