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

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

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

Неактивные пользователи — это учетные записи, которые долгое время не входили в систему и не проявляли активности. Их наличие может привести к нескольким проблемам:

  • Повышенная нагрузка на базу данных и сервер.
  • Увеличенный риск безопасности — заброшенные аккаунты могут быть скомпрометированы.
  • Завышенная статистика пользователей, что искажает аналитику.
  • Сложности в управлении и коммуникациях с аудиторией.

Удаление таких пользователей помогает поддерживать чистоту базы, улучшать производительность и безопасность сайта.

Проверка активности пользователя: какие критерии использовать

Для определения неактивных пользователей нужно выбрать подходящие критерии. Обычно используются:

  • Дата последнего входа (login). Если пользователь не заходил на сайт, например, более 6 месяцев — его можно считать неактивным.
  • Дата последней публикации или комментария (если сайт ориентирован на активность).
  • Дата обновления профиля или других действий.

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

Отслеживание даты последнего входа пользователя

Для начала добавим фиксирование даты входа пользователя с помощью хука wp_login. Вот пример функции с префиксом wpbit_:

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

Эта функция сохраняет текущую дату и время последнего входа в мета-поле пользователя wpbit_last_login.

Автоматическое удаление неактивных пользователей с помощью кода

Теперь, когда у нас есть дата последнего входа, можно написать функцию, которая будет удалять пользователей, не заходивших на сайт более определенного периода. Например, 180 дней.

function wpbit_delete_inactive_users() {
    $days_inactive = 180;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));

    $args = array(
        'meta_key' => 'wpbit_last_login',
        'meta_value' => $date_threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 1000
    );

    $user_query = new WP_User_Query($args);
    $users_to_delete = $user_query->get_results();

    foreach ($users_to_delete as $user_id) {
        require_once(ABSPATH . 'wp-admin/includes/user.php');
        wp_delete_user($user_id);
    }
}

// Запуск через WP-Cron
add_action('wpbit_daily_user_cleanup', 'wpbit_delete_inactive_users');

function wpbit_schedule_user_cleanup() {
    if (!wp_next_scheduled('wpbit_daily_user_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpbit_daily_user_cleanup');
    }
}
add_action('wp', 'wpbit_schedule_user_cleanup');

Этот код создает ежедневное задание, которое удаляет пользователей, у которых дата последнего входа старше 180 дней.

Настройка периодичности и безопасности удаления

Удаление пользователей — критичная операция. Рекомендуется:

  • Перед удалением делать резервную копию базы данных.
  • Добавить исключения для администраторов и важных ролей.
  • Отправлять уведомления модераторам о планируемом удалении.

Добавим исключение для администратора:

$args['role__not_in'] = ['administrator'];

Или внутри цикла:

if (in_array('administrator', get_userdata($user_id)->roles)) {
    continue; // Пропускаем администраторов
}

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

Если вы предпочитаете готовые решения, рассмотрите следующие плагины:

  • Inactive User Deleter — позволяет настроить период неактивности и автоматическое удаление. Удобен для быстрой настройки.
  • WP Sweep — инструмент для оптимизации базы данных, включая удаление неактивных пользователей.
  • Clearfy Pro с функцией очистки базы и управления пользователями. Подробнее на https://wpshop.ru/plugins/clearfy-pro/.

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

Советы по тестированию и отладке

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

  • Создайте тестовую среду или резервную копию сайта.
  • Проверьте корректность записи даты последнего входа пользователем.
  • Запустите функцию удаления вручную, чтобы увидеть, кто попадет под удаление.
  • Логируйте действия удаления для отчетности и восстановления.

Пример логирования удаления пользователей

function wpbit_delete_inactive_users() {
    $days_inactive = 180;
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_inactive . ' days'));

    $args = array(
        'meta_key' => 'wpbit_last_login',
        'meta_value' => $date_threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 1000,
        'role__not_in' => ['administrator'],
    );

    $user_query = new WP_User_Query($args);
    $users_to_delete = $user_query->get_results();

    foreach ($users_to_delete as $user_id) {
        $user_info = get_userdata($user_id);
        error_log('Удаление неактивного пользователя: ' . $user_info->user_login . ' (ID: ' . $user_id . ')');
        require_once(ABSPATH . 'wp-admin/includes/user.php');
        wp_delete_user($user_id);
    }
}

Логи можно просматривать в файле wp-content/debug.log при включенном режиме отладки.

Выводы и рекомендации

Автоматическое удаление неактивных пользователей — важный инструмент для поддержания безопасности и производительности сайта на WordPress. Используйте приведенный код с учетом особенностей вашего проекта, не забывайте про резервные копии и тестирование. Если предпочитаете плагины, обратите внимание на Clearfy Pro и другие проверенные решения.

Как создать конкретный виджет в WordPress с использованием AJAX
30.11.2025
Как использовать WP-Cron для решения проблем с отправкой писем в WordPress
25.04.2026
Как автоматизировать создание и удаление туториалов в WordPress
26.02.2026
Автоматизация обновления подписок в WordPress через AJAX
21.01.2026
Как автоматизировать удаление старых неиспользуемых медиафайлов в WordPress
07.03.2026