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 Автоматизация, гибкость, контроль Требует навыков программирования Приведенный код выше
Как изменить вывод метаданных в выставке постов WordPress: практические примеры
15.03.2026
WooCommerce: как запретить отмену заказа по ролям пользователей
29.04.2026
WooCommerce: как разрешить или запретить возврат товаров по ролям пользователей
19.04.2026
Как создать кастомный метабокс в WordPress: практическое руководство
04.11.2025
WooCommerce: как запретить отмену заказа по ролям пользователей
26.04.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше