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

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

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

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

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

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

Как определить неактивного пользователя: критерии и методы

Ключевой момент — это понять, кто считается неактивным. Чаще всего используют следующие критерии:

  • Дата последнего входа на сайт (login);
  • Дата последнего обновления профиля;
  • Отсутствие активности в комментариях, публикациях и т.п.;
  • Время с момента регистрации.

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

Добавляем фиксацию даты последнего входа пользователя

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

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

Этот код добавляет обработчик на событие входа wp_login, который обновляет мета-ключ wponline_last_login с текущим таймстампом.

Создаём функцию для удаления неактивных пользователей

Следующий шаг — написать функцию, которая будет искать пользователей, не заходивших на сайт более установленного срока, и удалять их.

function wponline_delete_inactive_users($days = 90) {
    $time_threshold = current_time('timestamp') - ($days * DAY_IN_SECONDS);
    
    $args = array(
        'meta_key' => 'wponline_last_login',
        'meta_value' => $time_threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 100,
    );
    
    $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) {
            require_once ABSPATH . 'wp-admin/includes/user.php';
            wp_delete_user($user_id);
        }
    }
}

Пояснения к коду:

  • Параметр $days задаёт период неактивности (по умолчанию 90 дней);
  • Мы выбираем пользователей, у которых дата последнего входа меньше порога (то есть они не заходили давно);
  • Удаление происходит через стандартную функцию wp_delete_user(), которая корректно удаляет все данные пользователя.

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

Для регулярного удаления неактивных пользователей нужно запланировать выполнение функции. Это делается через WP-Cron.

Регистрируем событие и хук

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

add_action('wponline_cleanup_hook', 'wponline_delete_inactive_users');

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

Расширение: исключаем администраторов и важных пользователей

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

function wponline_delete_inactive_users($days = 90) {
    $time_threshold = current_time('timestamp') - ($days * DAY_IN_SECONDS);
    
    $args = array(
        'meta_key' => 'wponline_last_login',
        'meta_value' => $time_threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 100,
        'role__not_in' => array('administrator', 'editor'),
    );
    
    $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) {
            require_once ABSPATH . 'wp-admin/includes/user.php';
            wp_delete_user($user_id);
        }
    }
}

Теперь мы исключаем роли administrator и editor из удаления.

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

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

  • Inactive User Deleter — простой и функциональный плагин для удаления пользователей по сроку неактивности;
  • WP Bulk Delete — инструмент для массового удаления записей и пользователей с множеством фильтров;
  • Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wponline.ru&utm_medium=article&utm_campaign=kak-dobavit-avtomaticheskoe-udaleniye-neaktivnyh-polzovatelej-v-wordpress-s-pomoshhyu-koda) — комплексный плагин для оптимизации WordPress, в том числе с функцией удаления неактивных пользователей.

Плагины удобны, но не всегда дают нужную гибкость, которую можно получить с помощью собственного кода.

Тестирование и безопасность

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

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

Пример простого логирования:

function wponline_delete_inactive_users($days = 90) {
    $time_threshold = current_time('timestamp') - ($days * DAY_IN_SECONDS);
    $args = array(
        'meta_key' => 'wponline_last_login',
        'meta_value' => $time_threshold,
        'meta_compare' => '<',
        'fields' => 'ID',
        'number' => 100,
        'role__not_in' => array('administrator', 'editor'),
    );
    $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) {
            $user_info = get_userdata($user_id);
            error_log('Deleting inactive user ID: ' . $user_id . ', login: ' . $user_info->user_login);
            require_once ABSPATH . 'wp-admin/includes/user.php';
            wp_delete_user($user_id);
        }
    }
}

Это позволит отслеживать действия скрипта в логах сервера.

Итоги

Автоматическое удаление неактивных пользователей в WordPress — важная задача для поддержания безопасности и производительности сайта. С помощью нескольких простых функций и WP-Cron вы сможете регулярно очищать базу, не опасаясь случайных ошибок. Для более удобного управления можно использовать готовые плагины, например, Clearfy Pro, который объединяет несколько полезных функций оптимизации WordPress.

Как удалить изменяемые поля в WordPress при удалении записи
06.01.2026
Как настроить удалённый запуск задач в WordPress с помощью WP-Cron
20.01.2026
WooCommerce: автоматическое изменение стоимости товаров при определённых условиях
09.05.2026
Как удалить файлы из медиабиблиотеки WordPress правильно
10.11.2025
Как создать меню в WordPress с помощью хука wp_nav_menu_items
27.11.2025