Что такое заблокированные и замороженные учётные записи в WordPress и зачем их удалять
В WordPress бывают ситуации, когда пользователи остаются в базе, но неактивны: заблокированы вручную, заморожены плагинами безопасности или просто давно не заходили. Такие записи создают нагрузку на базу данных, усложняют управление пользователями и могут быть использованы злоумышленниками для спама или брутфорс-атак.
Удаление таких учётных записей помогает уменьшить нагрузку, повысить безопасность и облегчить администрирование.
Диагностика: как определить заблокированные или неактивные учётные записи
Проверка активности пользователей через дату последнего входа
По умолчанию WordPress не хранит дату последнего входа, но можно получить данные из плагинов или добавить её самостоятельно.
Если у вас установлен плагин WP Last Login или аналогичный, можно экспортировать список пользователей с датами последнего входа и определить неактивных более года.
Определение заблокированных аккаунтов через мета-поля
Некоторые плагины безопасности добавляют мета-поля с информацией о блокировке, например user_blocked со значением 1.
Чтобы проверить наличие таких записей, выполните SQL-запрос через phpMyAdmin или WP-CLI:
SELECT user_id FROM wp_usermeta WHERE meta_key = 'user_blocked' AND meta_value = '1';Список пользователей без активности и с блокировками
Объедините данные для создания списка на удаление.
Пошаговое решение: удаление заблокированных и замороженных пользователей через код
Рассмотрим пример, как автоматически удалить пользователей, которые не заходили больше года и имеют мета-поле user_blocked = 1.
1. Создание функции для выборки и удаления пользователей
function delete_inactive_blocked_users() {
$one_year_ago = strtotime('-1 year');
$args = [
'meta_query' => [
'relation' => 'AND',
[
'key' => 'last_login',
'value' => $one_year_ago,
'compare' => '<',
'type' => 'NUMERIC',
],
[
'key' => 'user_blocked',
'value' => '1',
'compare' => '=',
],
],
'fields' => 'ID',
'number' => 100, // ограничение для безопасности
];
$users = get_users($args);
foreach ($users as $user_id) {
wp_delete_user($user_id);
}
}2. Запуск функции вручную или через WP-CLI
Для однократного запуска добавьте вызов функции в файл functions.php или используйте WP-CLI команду:
wp eval 'delete_inactive_blocked_users();'3. Автоматизация с помощью WP-Cron
Чтобы регулярно чистить базу, создайте событие в WP-Cron:
if (!wp_next_scheduled('delete_inactive_blocked_users_cron')) {
wp_schedule_event(time(), 'daily', 'delete_inactive_blocked_users_cron');
}
add_action('delete_inactive_blocked_users_cron', 'delete_inactive_blocked_users');Проверка результата после удаления
Проверьте количество пользователей до и после удаления с помощью SQL-запроса:
SELECT COUNT(ID) FROM wp_users;Также убедитесь, что не осталось пользователей с мета-полем user_blocked = 1 и датой last_login больше года назад:
SELECT user_id FROM wp_usermeta WHERE meta_key = 'user_blocked' AND meta_value = '1'
AND user_id IN (
SELECT ID FROM wp_users WHERE ID NOT IN (SELECT user_id FROM wp_usermeta WHERE meta_key = 'last_login' AND meta_value > UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 1 YEAR)))
);Частые ошибки и как их исправить
- Отсутствие мета-поля last_login: WordPress не хранит дату входа по умолчанию. Добавьте её с помощью плагина или самостоятельно через хук
wp_login:
add_action('wp_login', function($user_login, $user) {
update_user_meta($user->ID, 'last_login', time());
}, 10, 2);- Удаление нужных пользователей: Будьте осторожны с критериями выборки. Всегда делайте резервную копию базы перед массовым удалением.
- Превышение лимитов памяти или времени выполнения: Ограничивайте количество пользователей в запросе (например, 100 за раз) и запускайте функцию по крону.
- Удаление без удаления связанных данных:
wp_delete_userудаляет все связанные данные, но если вы используете кастомные таблицы, очистите их вручную.
Практические советы по безопасности и производительности
- Регулярно очищайте неактивных и заблокированных пользователей, чтобы снизить риск взлома.
- Используйте плагин Clearfy Pro для управления дублями пользователей и оптимизации базы данных Подробнее о Clearfy.
- Автоматизируйте сбор данных о последнем входе пользователей, если плагин не установлен.
- Ограничивайте права пользователей, чтобы минимизировать ущерб в случае взлома.
Сравнение подходов удаления пользователей
| Метод | Плюсы | Минусы |
|---|---|---|
| Удаление вручную через админку | Просто, не требует кода | Долго при большом количестве, риск пропуска |
| Кодовое удаление по критериям | Автоматизация, гибкость | Требуется опыт и тестирование |
| Плагины очистки пользователей | Удобный интерфейс, дополнительные функции | Зависимость от стороннего кода |