В процессе администрирования WordPress-сайта может накопиться множество заблокированных или неактивных пользователей, которые занимают место в базе данных и могут негативно влиять на безопасность и производительность сайта. В этой статье мы подробно рассмотрим, как эффективно находить и удалять таких пользователей, используя как готовые плагины, так и собственные скрипты на PHP.
Почему важно удалять заблокированных пользователей в WordPress
Заблокированные пользователи — это учетные записи, которым запрещён вход на сайт, например, через смену роли на «Заблокированный» или деактивацию аккаунта с помощью плагинов безопасности. Оставлять их в базе данных нежелательно по нескольким причинам:
- Безопасность: устаревшие аккаунты могут стать целью для взлома, особенно если пароли слабые.
- Оптимизация базы данных: большое количество ненужных записей снижает производительность сайта.
- Упрощение администрирования: легче управлять актуальными пользователями без мусора.
Как найти заблокированных пользователей: критерии и методы
В WordPress нет стандартного поля “заблокирован” для пользователей, поэтому блокировка обычно реализуется через изменение роли или специальные метаданные. Рассмотрим основные способы найти таких пользователей:
По роли пользователя
Если вы используете роль blocked или аналогичную, просто фильтруйте пользователей по ней:
$blocked_users = get_users(['role' => 'blocked']);
Это самый простой способ, если блокировка реализована через роли.
По наличию мета-поля
Некоторые плагины добавляют к пользователям мета-поля, например is_blocked или account_status. В этом случае можно искать так:
$blocked_users = get_users([ 'meta_key' => 'is_blocked', 'meta_value' => '1' ]);
По дате последнего входа
Если вы хотите удалить пользователей, которые давно не заходили на сайт, можно использовать плагин Clearfy Pro или запросить мета-данные с датой последнего входа (если она сохраняется).
Удаление заблокированных пользователей через код
Ниже пример функции для удаления всех пользователей с ролью blocked. Перед запуском обязательно сделайте резервную копию базы данных.
function wpcore_delete_blocked_users() {
$blocked_users = get_users(['role' => 'blocked']);
foreach ($blocked_users as $user) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user->ID);
}
}
// Запуск функции, например, через WP-CLI или хук
// wpcore_delete_blocked_users();
Если блокировка реализована через мета-поле, код будет таким:
function wpcore_delete_blocked_users_by_meta() {
$blocked_users = get_users([
'meta_key' => 'is_blocked',
'meta_value' => '1',
'fields' => 'ID'
]);
foreach ($blocked_users as $user_id) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user_id);
}
}
Удаление пользователей с помощью плагинов
Если вы предпочитаете не писать код, существуют удобные плагины:
- Clearfy Pro — предлагает модуль для управления пользователями, включая массовое удаление по ролям и статусам.
- User Cleanup — бесплатный плагин для удаления неактивных и заблокированных пользователей по различным критериям.
Настройте фильтры, выберите пользователей и удалите их безопасно.
Резервное копирование и безопасность при удалении пользователей
Удаление пользователей — необратимая операция. Рекомендуется:
- Создавать резервную копию базы данных перед массовыми действиями.
- Проверять критерии отбора, чтобы не удалить важных пользователей.
- Проводить тесты на копии сайта.
Для резервного копирования можно использовать плагин WPCommunity или другие проверенные инструменты.
Автоматизация удаления заблокированных пользователей через Cron
Для регулярного поддержания чистоты базы данных можно автоматизировать удаление, добавив задачу в Cron WordPress. Пример кода для планировщика:
function wpcore_cron_delete_blocked_users() {
if (!wp_next_scheduled('wpcore_delete_blocked_users_event')) {
wp_schedule_event(time(), 'daily', 'wpcore_delete_blocked_users_event');
}
}
add_action('wp', 'wpcore_cron_delete_blocked_users');
add_action('wpcore_delete_blocked_users_event', 'wpcore_delete_blocked_users');
function wpcore_delete_blocked_users() {
$blocked_users = get_users(['role' => 'blocked']);
foreach ($blocked_users as $user) {
require_once ABSPATH . 'wp-admin/includes/user.php';
wp_delete_user($user->ID);
}
}
Этот код будет запускать удаление каждый день. Можно менять период по необходимости.