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

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

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

Чтобы проверить, насколько актуальна проблема на вашем сайте, выполните SQL-запрос к базе данных или воспользуйтесь плагином для анализа активности пользователей. Например, запрос для поиска пользователей без заказов и без логинов за последние 6 месяцев:

SELECT ID, user_login, user_email FROM wp_users u
LEFT JOIN wp_wc_customer_lookup c ON u.ID = c.user_id
WHERE c.user_id IS NULL
AND u.user_registered < DATE_SUB(NOW(), INTERVAL 6 MONTH);

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

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

Шаг 1. Создайте функцию для выборки и удаления неактивных пользователей

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин:

function wpmark_delete_inactive_woocommerce_users() {
    global $wpdb;
    $interval = 180; // дней без активности
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$interval} days"));

    // Получаем пользователей без заказов и без входа в систему за последние $interval дней
    $users = $wpdb->get_results($wpdb->prepare(
        "SELECT u.ID FROM {$wpdb->users} u
         LEFT JOIN {$wpdb->prefix}wc_customer_lookup c ON u.ID = c.user_id
         WHERE (c.user_id IS NULL OR c.last_active < %s)
         AND u.user_registered < %s",
         $date_threshold, $date_threshold
    ));

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

Шаг 2. Зарегистрируйте WP-Cron задачу для регулярного запуска удаления

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

add_action('wpmark_inactive_user_cleanup_event', 'wpmark_delete_inactive_woocommerce_users');

Шаг 3. Разрешите гибко менять срок неактивности через фильтр

function wpmark_get_inactivity_interval() {
    return apply_filters('wpmark_inactivity_interval_days', 180);
}
// В функции удаления замените жестко заданное число на вызов этой функции:
// $interval = wpmark_get_inactivity_interval();

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

Для проверки работы решения:

  • Запустите вручную функцию wpmark_delete_inactive_woocommerce_users() через WP-CLI или php-код.
  • Проверьте в базе данных, что пользователи с датой регистрации и последней активностью более 6 месяцев удалены.
  • Мониторьте логи ошибок и активности сайта, чтобы убедиться в отсутствии сбоев.

Пример команды WP-CLI для ручного запуска:

wp eval 'wpmark_delete_inactive_woocommerce_users();'

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

  • Ошибка: Пользователи не удаляются.
    Причина: Неправильный SQL-запрос или отсутствие данных о последней активности.
    Решение: Проверьте наличие таблицы wp_wc_customer_lookup и поле last_active. Если поле отсутствует, можно заменить условие на дату последнего заказа из wp_posts с типом shop_order.
  • Ошибка: WP-Cron не запускается.
    Причина: Отсутствие трафика или отключенный WP-Cron.
    Решение: Настройте системный cron на сервере или используйте плагин для управления cron-задачами.
  • Ошибка: Удаляются активные пользователи.
    Причина: Некорректная логика проверки активности.
    Решение: Уточните критерии активности: например, проверяйте дату последнего заказа и дату последнего входа с помощью get_user_meta($user_id, 'last_login', true) (нужно заранее сохранять этот мета ключ).

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

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

Сравнение подходов: плагин vs. кастомный код vs. ручное удаление

МетодПреимуществаНедостатки
Плагин (например, WP-Optimize, Clearfy Pro)Простота настройки, дополнительные опции оптимизацииМожет нагружать сайт, не всегда точный контроль
Кастомный код (как в статье)Гибкость, точный контроль, минимальные ресурсыТребует навыков разработки, ответственность за поддержку
Ручное удаление через админкуБезопасно, только при малом числе пользователейНеподходяще для больших баз, трудоемко
Как избежать конфликтов между плагинами в WordPress
25.12.2025
Как удалить пустое меню в WordPress: практическое руководство
20.03.2026
Отключение автопроизводства событий WooCommerce для оптимизации производительности
15.05.2026
Как создать автоматический снимок экрана страницы в WordPress
28.01.2026
Как использовать хук woocommerce_order_status_changed для автоматизации в WooCommerce
27.05.2026