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

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

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

Как определить, что корзина считается «старой»

В WooCommerce корзина хранится как session или в виде заказа в статусе «отложенный» (например, создан, но не оплачен). Для автоматического удаления стоит ориентироваться на дату последнего обновления или создания сессии/корзины. Обычно используют период от 7 до 30 дней.

Определение срока хранения корзин

  • Период 7 дней — быстрое удаление, подходит для высоконагруженных магазинов.
  • Период 14-30 дней — более лояльный срок, сохраняет корзины для повторного возвращения покупателей.

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

WooCommerce не хранит корзины как отдельную сущность, но корзина покупателя связана с сессиями и заказами в статусах pending или failed. Для очистки старых корзин нужно удалять заказы с этими статусами, созданные давно.

Выполним очистку с помощью WP Cron, который будет запускать функцию удаления старых заказов.

Шаг 1. Создаем функцию удаления заказов старше N дней

function wc_delete_old_pending_orders() {
    $days = 30; // Срок в днях
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'status' => array('pending', 'failed'),
        'date_created' => '<' . $date,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        wp_trash_post($order_id); // или wp_delete_post($order_id, true) для полного удаления
    }
}

Шаг 2. Регистрируем WP Cron событие для регулярного запуска

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

add_action('wc_daily_delete_old_orders', 'wc_delete_old_pending_orders');

Шаг 3. Добавляем код в файл functions.php вашей темы или создаем небольшой плагин

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

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

  • Зайдите в админку WooCommerce - Заказы.
  • Отфильтруйте заказы со статусом pending или failed, созданные более 30 дней назад.
  • Убедитесь, что таких заказов нет (или их количество значительно уменьшилось).
  • Проверьте логи сервера или отладочный вывод, если добавите error_log в функцию удаления.

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

  • WP Cron событие не срабатывает: проверьте, что на сайте не отключен WP Cron (константа DISABLE_WP_CRON в wp-config.php должна быть false или отсутствовать). Можно настроить системный cron для вызова wp-cron.php.
  • Удаляются не те заказы: проверьте параметры status и date_created в запросе wc_get_orders.
  • Функция удаления вызывает ошибки: убедитесь, что вызываете wp_trash_post для безопасного удаления, либо wp_delete_post с флагом полного удаления и проверяйте права пользователя.

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

  • Для больших магазинов с тысячами заказов ограничьте количество удаляемых заказов за один запуск (limit в wc_get_orders) и запускайте функцию чаще.
  • Перед удалением можно отправлять уведомления администратору или создавать резервные копии заказов.
  • Используйте wp_trash_post, чтобы иметь возможность восстановить заказы из корзины WordPress при ошибках.
  • Следите за нагрузкой на базу при запуске очистки — если сайт большой, лучше разбивать очистку на части.

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

МетодОписаниеПлюсыМинусы
WP Cron + wc_get_orders + wp_trash_postАвтоматическое удаление заказов в статусе pending/failed старше N днейГибкость, безопасность, интеграция с WooCommerceЗависит от работы WP Cron, нагрузка на БД при большом объеме
Ручное удаление через панель WooCommerceАдминистратор удаляет заказы вручнуюПростота, контрольТрудозатратно, не автоматизировано
Плагины для очистки WooCommerceГотовые решения с интерфейсомУдобство, дополнительные функцииМогут нагружать сайт, платные, зависят от разработчика
Как добавить поле в форму регистрации WordPress
10.11.2025
Как создать функциональный REST API endpoint в WordPress для обмена данными
04.01.2026
WooCommerce: как использовать хуки для кастомизации корзины
04.06.2026
Как изменить URL страницы регистрации WordPress без плагинов
13.01.2026
Как отключить отображение вариаций в каталоге WooCommerce и оставить их на странице товара
09.08.2026