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

Что значит «неактивный клиент» в WooCommerce и зачем его удалять

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

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

Для начала нужно определить критерии неактивности. Обычно используют дату последнего логина или дату последнего заказа. Если даты не фиксируются, их нужно начать сохранять.

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

Код для записи даты последнего входа пользователя

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

Этот код нужно добавить в functions.php вашей темы или в отдельный плагин.

Запрос для получения неактивных клиентов

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

$six_months_ago = date('Y-m-d H:i:s', strtotime('-6 months'));

$args = [
    'role' => 'customer',
    'meta_query' => [
        [
            'key' => 'last_login',
            'value' => $six_months_ago,
            'compare' => '<=',
            'type' => 'DATETIME'
        ]
    ],
    'fields' => 'ID'
];
$users = get_users($args);

// Проверим дату последнего заказа каждого пользователя
foreach ($users as $user_id) {
    $orders = wc_get_orders([
        'customer_id' => $user_id,
        'limit' => 1,
        'orderby' => 'date',
        'order' => 'DESC'
    ]);
    if (empty($orders) || $orders[0]->get_date_created()->getTimestamp() <= strtotime($six_months_ago)) {
        // пользователь неактивен
    }
}

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

1. Установка и настройка механизма записи даты последнего логина

Добавьте код из предыдущего раздела для записи даты последнего входа.

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

Ниже пример функции, которая удалит пользователей, не заходивших и не покупавших более 6 месяцев.

function delete_inactive_customers() {
    $six_months_ago = date('Y-m-d H:i:s', strtotime('-6 months'));

    $args = [
        'role' => 'customer',
        'meta_query' => [
            [
                'key' => 'last_login',
                'value' => $six_months_ago,
                'compare' => '<=',
                'type' => 'DATETIME'
            ]
        ],
        'fields' => 'ID'
    ];

    $users = get_users($args);

    foreach ($users as $user_id) {
        $orders = wc_get_orders([
            'customer_id' => $user_id,
            'limit' => 1,
            'orderby' => 'date',
            'order' => 'DESC'
        ]);

        $last_order_date = $orders ? $orders[0]->get_date_created()->getTimestamp() : 0;

        if ($last_order_date <= strtotime($six_months_ago)) {
            require_once(ABSPATH . 'wp-admin/includes/user.php');
            wp_delete_user($user_id);
        }
    }
}

3. Автоматизация через WP-Cron

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

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

add_action('delete_inactive_customers_event', 'delete_inactive_customers');

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

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

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

  • Дата последнего логина не обновляется: Убедитесь, что хук wp_login подключен и код добавлен в правильное место. Проверьте, что пользователи действительно входят в систему.
  • Удаляются клиенты с недавними заказами: Проверьте корректность сравнения дат и таймзону сервера.
  • WP-Cron не срабатывает: На некоторых хостингах WP-Cron зависит от посещений сайта. Можно настроить системный cron или запускать вручную.
  • Ошибки при удалении пользователя: Убедитесь, что подключен файл wp-admin/includes/user.php перед вызовом wp_delete_user.

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

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

Сравнение вариантов удаления неактивных клиентов

МетодПреимуществаНедостаткиКомпромисс
Плагин (например, WP Bulk Delete)Простота настройки, UI для фильтрацииМожет быть избыточным, нагрузка на БДИспользовать для разовой чистки
Код (как в статье)Точный контроль, автоматизация, без лишних плагиновТребуется понимание PHP, тестированиеИспользовать при регулярной очистке
Ручное удалениеБезопасно, минимальный риск ошибокТрудозатратно, не подходит для больших базИспользовать для малых магазинов
Автоматическое переключение языка в WordPress по геолокации
07.01.2026
Автоматическое создание миниатюр (thumbnail) для картинок в WordPress
01.12.2025
Как использовать WordPress Transients для оптимизации производительности сайта
04.12.2025
Как использовать хук WooCommerce 'woocommerce_order_status_changed' для отправки дополнительных уведомлений
21.04.2026
Как использовать хуки для изменения функционала WordPress
17.11.2025