Как удалить заблокированные или замороженные учётные записи пользователей в WordPress

Что такое заблокированные и замороженные учётные записи в 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.
  • Автоматизируйте сбор данных о последнем входе пользователей, если плагин не установлен.
  • Ограничивайте права пользователей, чтобы минимизировать ущерб в случае взлома.

Сравнение подходов удаления пользователей

МетодПлюсыМинусы
Удаление вручную через админкуПросто, не требует кодаДолго при большом количестве, риск пропуска
Кодовое удаление по критериямАвтоматизация, гибкостьТребуется опыт и тестирование
Плагины очистки пользователейУдобный интерфейс, дополнительные функцииЗависимость от стороннего кода
Как удалить все комментарии в WordPress за один день
04.11.2025
Как массово изменить title и meta description в WordPress без плагинов
07.05.2026
Как добавить уникальные поля для пользователей в WordPress
12.03.2026
Как создать динамическую таблицу в WordPress с помощью шорткода
16.11.2025
Как использовать мета-записи для оптимизации WordPress
04.01.2026