Автоматизация удаления неактивных пользователей в WordPress

Диагностика проблемы: зачем удалять неактивных пользователей

В крупных проектах на WordPress количество зарегистрированных пользователей может быстро расти. Многие из них перестают заходить на сайт, что создает нагрузку на базу данных и снижает безопасность. Неактивные аккаунты повышают риски взлома, а также затрудняют управление пользователями.

Чтобы выявить неактивных пользователей, нужно определить критерии неактивности. Обычно это отсутствие входа в аккаунт более 3–6 месяцев или отсутствие активности (комментариев, заказов, действий).

Как проверить, что пользователи неактивны

WordPress по умолчанию не хранит дату последнего входа пользователя. Чтобы получить эти данные, можно использовать метаполе last_login и обновлять его при каждом входе с помощью хука wp_login. Например:

add_action('wp_login', function($user_login, $user) {
    update_user_meta($user->ID, 'last_login', current_time('mysql'));
}, 10, 2);

После этого в базе появятся даты последних входов, по которым можно фильтровать неактивных.

Пошаговое решение: скрипт автоматического удаления неактивных пользователей

1. Добавляем фикс для регистрации даты последнего входа

add_action('wp_login', function($user_login, $user) {
    update_user_meta($user->ID, 'last_login', current_time('mysql'));
}, 10, 2);

2. Создаем функцию для удаления пользователей, не заходивших более N дней

function delete_inactive_users($days = 180) {
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
    $args = [
        'meta_key' => 'last_login',
        'meta_compare' => '<',
        'meta_value' => $date_threshold,
        'fields' => 'ID',
        'number' => -1,
    ];
    $user_query = new WP_User_Query($args);
    $inactive_users = $user_query->get_results();

    foreach($inactive_users as $user_id) {
        wp_delete_user($user_id);
    }
    return count($inactive_users);
}

3. Запускаем удаление по расписанию с помощью WP-Cron

if (!wp_next_scheduled('delete_inactive_users_daily')) {
    wp_schedule_event(time(), 'daily', 'delete_inactive_users_daily');
}

add_action('delete_inactive_users_daily', function() {
    $deleted_count = delete_inactive_users(180); // 180 дней
    error_log("Удалено неактивных пользователей: " . $deleted_count);
});

Проверка результата

  • Проверьте наличие мета-поля last_login у пользователей в базе данных (таблица wp_usermeta).
  • Выполните вручную вызов delete_inactive_users(180) через админский плагин или командную строку WP-CLI и проверьте список удаленных пользователей.
  • Проверьте логи ошибок PHP или файл debug.log на наличие записей о количестве удаленных пользователей.
  • Убедитесь, что пользователи с датой последнего входа старше 180 дней пропали из списка пользователей.

Частые ошибки и их причины

  • Отсутствие метаполя last_login: если не подключен хук wp_login, даты не будут сохраняться и фильтрация не сработает.
  • Удаление администраторов: скрипт удаляет всех пользователей по условию, нужно добавить исключения для ролей с правами администратора.
  • Неправильный формат даты: убедитесь, что даты в метаполе и в сравнении WP_User_Query совпадают по формату.
  • Конфликты с кешированием: если сайт использует кеш, удаление может не сразу отображаться в админке пользователей.

Практические советы по безопасности и производительности

  • Добавьте проверку ролей, чтобы не удалять аккаунты с особыми правами. Например:
foreach($inactive_users as $user_id) {
    $user = get_userdata($user_id);
    if (in_array('administrator', $user->roles)) continue;
    wp_delete_user($user_id);
}
  • Используйте WP-CLI для запуска скрипта в больших базах, чтобы избежать таймаутов.
  • Резервное копирование базы перед массовыми удалениями обязательно.
  • Если число неактивных пользователей большое, разбейте удаление на несколько вызовов с лимитом.
  • Для повышения производительности храните дату последнего входа в формате UNIX timestamp.

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

МетодПлюсыМинусыКомпромисс
Ручное удаление через админкуПростой, не требует кодаНепрактично при большом объеме; риск ошибкиИспользовать для выборочного удаления
Скрипт с WP_User_Query и wp_delete_userАвтоматизация; гибкость фильтровТребует настройки; возможны ошибки без проверки ролейДобавить исключения и лимиты
Плагины для управления пользователямиИнтерфейс, готовые функцииМогут быть избыточны; нагрузка сайтаИспользовать при отсутствии навыков программирования
Как использовать хуки WooCommerce для добавления пользовательского функционала
26.12.2025
Как добавить авторизацию через Google в WordPress
14.03.2026
Автоматизация удаления неактивных пользователей в WordPress
05.07.2026
Как удалить или скрыть регистрацию пользователей в WordPress
28.03.2026
Как удалить зависимости от Python в WooCommerce на WordPress
27.04.2026

Ниже мы подобрали самые актуальные материалы по Вордпресс