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

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

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

Неактивные пользователи — это аккаунты, которые давно не заходили на сайт, не оставляют комментарии, не совершают действий. Такие аккаунты:

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

Удаление таких пользователей повышает безопасность и производительность сайта.

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

Если не хочется писать код, можно использовать плагины. Вот несколько популярных вариантов:

1. Delete Inactive Users

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

2. Inactive User Deleter

Позволяет удалять пользователей по дате последней активности. Поддерживает массовые операции и фильтры по ролям. Бесплатный и с открытым исходным кодом.

3. Clearfy Pro — комплексная оптимизация

Плагин Clearfy Pro предлагает модуль для управления пользователями, включая удаление неактивных. Это удобное решение для тех, кто хочет комплексно улучшить производительность и безопасность сайта.

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

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

Как определить последнюю активность пользователя

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

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

Этот код сохраняет мета-данные с ключом wpmentor_last_login, куда записывается метка времени последнего входа.

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

Далее создаём функцию для поиска и удаления пользователей, у которых дата последнего входа больше 180 дней назад:

function wpmentor_delete_inactive_users() {
    $days_inactive = 180;
    $cutoff = strtotime("-{$days_inactive} days");

    $args = [
        'meta_key' => 'wpmentor_last_login',
        'meta_compare' => '<',
        'meta_value' => $cutoff,
        'meta_type' => 'NUMERIC',
        'fields' => 'ID',
        'role__not_in' => ['administrator'], // не удалять админов
    ];

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

    if (!empty($users_to_delete)) {
        foreach ($users_to_delete as $user_id) {
            wp_delete_user($user_id);
        }
    }
}

Этот код выбирает всех пользователей, чей wpmentor_last_login меньше чем метка 180 дней назад, исключая администраторов, и удаляет их.

Автоматизация с помощью WP-Cron

Чтобы задача запускалась автоматически, зарегистрируем событие в WP-Cron, например, еженедельно:

function wpmentor_schedule_inactive_user_deletion() {
    if (!wp_next_scheduled('wpmentor_weekly_delete_inactive_users')) {
        wp_schedule_event(time(), 'weekly', 'wpmentor_weekly_delete_inactive_users');
    }
}
add_action('wp', 'wpmentor_schedule_inactive_user_deletion');

add_action('wpmentor_weekly_delete_inactive_users', 'wpmentor_delete_inactive_users');

Таким образом функция wpmentor_delete_inactive_users будет запускаться автоматически каждую неделю.

Как протестировать и обезопасить процесс удаления

Перед тем как запустить удаление на живом сайте, важно тщательно протестировать код на тестовой копии:

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

Для вывода списка неактивных пользователей можно временно заменить функцию удаления на такой код:

function wpmentor_list_inactive_users() {
    $days_inactive = 180;
    $cutoff = strtotime("-{$days_inactive} days");

    $args = [
        'meta_key' => 'wpmentor_last_login',
        'meta_compare' => '<',
        'meta_value' => $cutoff,
        'meta_type' => 'NUMERIC',
        'fields' => ['ID', 'user_login'],
        'role__not_in' => ['administrator'],
    ];

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

    echo '<pre>Неактивные пользователи:';<br>
    foreach ($users as $user) {
        echo "ID: {$user->ID}, Логин: {$user->user_login}\n";
    }
    echo '</pre>';
}

Заключение: лучшие практики удаления неактивных пользователей

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

  • Всегда исключайте из удаления важные роли — администраторов и редакторов.
  • Период неактивности выбирайте с учётом специфики сайта (обычно от 3 до 6 месяцев).
  • Используйте уведомления и резервное копирование перед массовым удалением.
  • Для удобства можно использовать специализированные плагины, например, Delete Inactive Users или Clearfy Pro.

Реализация своей функции даёт максимальную гибкость и контроль, особенно если нужно интегрировать логику в собственные бизнес-процессы.

Как добавить локализацию в свой плагин WordPress
27.11.2025
Как использовать REST API WordPress для создания кастомных приложений
13.11.2025
Как удалить и заблокировать регистрацию пользователей в WordPress
23.01.2026
Как сделать динамический фильтр товаров в WooCommerce без плагинов
03.01.2026
WooCommerce: решение проблемы не обновляющегося SKU вариаций товаров
07.05.2026