WooCommerce: автоматическое удаление неактивных клиентов через код

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

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

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

Ключевые признаки неактивности:

  • Отсутствие заказов за длительный период (например, 6 месяцев и более)
  • Отсутствие входов в аккаунт (последний логин более 6 месяцев назад)

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

Пример SQL-запроса для проверки неактивных клиентов (без последнего логина):

SELECT u.ID, u.user_login, MAX(p.post_date) AS last_order_date
FROM wp_users u
LEFT JOIN wp_posts p ON p.post_author = u.ID AND p.post_type = 'shop_order' AND p.post_status IN ('wc-completed', 'wc-processing')
GROUP BY u.ID
HAVING last_order_date < DATE_SUB(NOW(), INTERVAL 6 MONTH) OR last_order_date IS NULL;

Пошаговое решение: автоматическое удаление неактивных клиентов через код

Реализуем PHP-функцию, которая по крону будет удалять пользователей, не совершавших заказов более 6 месяцев. Для безопасности удаление будет происходить только для пользователей с ролью customer.

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

function wprus_delete_inactive_customers() {
    $args = array(
        'role' => 'customer',
        'fields' => array('ID'),
        'number' => -1,
    );
    $users = get_users($args);
    $threshold = strtotime('-6 months');

    foreach ($users as $user) {
        $last_order = get_last_order_date($user->ID);
        if (!$last_order || strtotime($last_order) < $threshold) {
            wp_delete_user($user->ID);
        }
    }
}

function get_last_order_date($user_id) {
    $orders = wc_get_orders(array(
        'customer_id' => $user_id,
        'limit' => 1,
        'orderby' => 'date',
        'order' => 'DESC',
        'status' => array('completed', 'processing'),
    ));
    if (!empty($orders)) {
        return $orders[0]->get_date_created()->date('Y-m-d H:i:s');
    }
    return false;
}

Шаг 2. Добавляем WP-Cron задачу для регулярного запуска

add_action('wprus_daily_delete_inactive_customers', 'wprus_delete_inactive_customers');

if (!wp_next_scheduled('wprus_daily_delete_inactive_customers')) {
    wp_schedule_event(time(), 'daily', 'wprus_daily_delete_inactive_customers');
}

Шаг 3. Отменяем задачу при деактивации темы/плагина (опционально)

function wprus_deactivate_cleanup() {
    $timestamp = wp_next_scheduled('wprus_daily_delete_inactive_customers');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wprus_daily_delete_inactive_customers');
    }
}
register_deactivation_hook(__FILE__, 'wprus_deactivate_cleanup');

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

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

  • Запустите функцию вручную через do_action('wprus_daily_delete_inactive_customers'); в functions.php или через WP-CLI wp eval 'do_action("wprus_daily_delete_inactive_customers");'.
  • Проверьте, что пользователи с отсутствием заказов более 6 месяцев удалились (через админку или SQL запрос).
  • Мониторьте логи ошибок и работу WP-Cron с помощью плагина Cron Manager или WP-CLI.

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

  • Удаляются не те пользователи: проверьте роль пользователя и условия выборки заказов.
  • Функция не запускается по расписанию: убедитесь, что WP-Cron работает, нет проблем с посещаемостью сайта или используйте системный cron для вызова wp-cron.php.
  • Пользователи с активными заказами удаляются: проверьте правильность статусов заказов в фильтре wc_get_orders.
  • Ошибки при удалении пользователей: убедитесь, что нет ограничений на удаление, и что пользователь не является администратором.

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

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

Таблица сравнения методов удаления неактивных клиентов

МетодПреимуществаНедостаткиПример использования
Ручное удаление Простота, контроль Затратно по времени, риск ошибок Через админку WordPress
Плагин для очистки Удобство, интерфейс Зависимость от сторонних разработчиков, нагрузка Плагины типа WP Sweep
Код с WP-Cron Автоматизация, гибкость, контроль Требует навыков программирования Приведенный код выше
WooCommerce: автоматическое удаление неоплаченных заказов с подробной настройкой
25.05.2026
Как автоматизировать удаление старых ревизий в WordPress
09.01.2026
WooCommerce: как автоматически изменять ставку налога по регионам клиента
19.07.2026
WooCommerce: как автоматически удалять товары по дате публикации
24.06.2026
WooCommerce: автоматическое удаление старых неоплаченных заказов
15.05.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее