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

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

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

Диагностика: кто считается неактивным пользователем

В контексте WooCommerce неактивным можно считать пользователя, который не совершал покупок и не заходил на сайт в течение определённого времени (например, 6 месяцев). Чтобы проверить, сколько таких пользователей у вас есть, используйте следующий SQL-запрос через phpMyAdmin или wp-cli:

SELECT ID, user_login, user_email, user_registered, last_login.meta_value AS last_login_date
FROM wp_users
LEFT JOIN wp_usermeta AS last_login ON wp_users.ID = last_login.user_id AND last_login.meta_key = 'last_login'
WHERE (last_login.meta_value < DATE_SUB(NOW(), INTERVAL 6 MONTH) OR last_login.meta_value IS NULL)
AND wp_users.ID NOT IN (
  SELECT DISTINCT user_id FROM wp_wc_customer_lookup
  WHERE last_order_date > DATE_SUB(NOW(), INTERVAL 6 MONTH)
);

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

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

Шаг 1. Отслеживание даты последнего входа

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

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

Шаг 2. Создание WP-Cron задачи для удаления пользователей

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

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

Шаг 3. Реализация функции удаления

Функция будет искать пользователей, которые не заходили и не покупали более 6 месяцев, и удалять их:

function delete_inactive_woocommerce_users() {
    global $wpdb;
    $threshold_date = date('Y-m-d H:i:s', strtotime('-6 months'));

    $users_to_delete = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->users} u
         LEFT JOIN {$wpdb->usermeta} lm ON u.ID = lm.user_id AND lm.meta_key = 'last_login'
         LEFT JOIN wp_wc_customer_lookup cl ON u.ID = cl.user_id
         WHERE (lm.meta_value < %s OR lm.meta_value IS NULL)
         AND (cl.last_order_date < %s OR cl.last_order_date IS NULL)",
         $threshold_date, $threshold_date
    ));

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

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

Чтобы проверить, что удаление работает:

  • Вручную создайте тестового пользователя с датой последнего входа и заказом старше 6 месяцев (через базу или wp-cli).
  • Запустите событие вручную через wp-cli: wp cron event run delete_inactive_woocommerce_users.
  • Проверьте, что этот пользователь удалён (через админку или запрос к базе).
  • Отслеживайте логи ошибок и уведомления на случай сбоев.

Частые ошибки и как их исправить

  • Пользователи не удаляются: Проверьте, что задача wp-cron действительно выполняется. Для этого можно использовать плагин WP Crontrol или запускать команду вручную.
  • Удаляются лишние пользователи: Убедитесь, что условия в SQL-запросе корректны и не учитывают активных пользователей. Проверьте корректность хранения даты last_login.
  • Ошибка при удалении пользователя: Проверьте, что функция wp_delete_user подключена через require_once, и что у пользователя нет критически важных зависимостей (например, админские права).

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

  • Добавьте логирование удалённых пользователей для возможности аудита.
  • Перед удалением можно отправлять уведомления на email администратору.
  • Выбирайте разумный период неактивности, чтобы не потерять потенциальных клиентов.
  • Для больших баз данных используйте пагинацию при выборке пользователей для удаления, чтобы избежать таймаутов.
  • Рассмотрите использование плагина Clearfy Pro для дополнительной оптимизации базы и управления пользователями (Подробнее о Clearfy Pro).

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

Метод Плюсы Минусы
WP-Cron + кастомный код Полный контроль, бесплатно, гибкость Требует знаний, возможны ошибки в логике, нагрузка на БД
Плагины для очистки пользователей Простота, готовые настройки, поддержка Могут быть платными, ограниченная кастомизация
Ручное удаление через базу данных Быстро для одного раза Риск ошибок, нет автоматизации, опасно для новичков
Как отключить автообновления в WordPress без риска для сайта
18.03.2026
Автоматический импорт постов из Яндекс.Дзен в WordPress
16.02.2026
Как создать собственный виджет WordPress
11.11.2025
Как использовать WP Remote Post для отправки данных из WordPress в внешние сервисы
12.12.2025
Как оптимизировать загрузку шаблонов WordPress для улучшения производительности
15.01.2026