WooCommerce: как автоматически отслеживать брошенные заказы и очищать корзину

Диагностика проблемы брошенных заказов в WooCommerce

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

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

  • Количество заказов со статусом pending или failed за последние 7-14 дней;
  • Сколько корзин остаются неочищенными, если используется плагин для сохранения корзин;
  • Наличие уведомлений о брошенных заказах (если есть плагин для email-рассылок);
  • Логи ошибок, связанные с обработкой заказов и сессий WooCommerce.

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

1. Автоматическое удаление неоплаченных заказов

WooCommerce не удаляет заказы автоматически, но можно добавить в functions.php следующий код для удаления заказов со статусом pending старше N дней.

function wc_auto_delete_pending_orders() {
    $days = 7; // Количество дней хранения
    $date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = [
        'status' => 'pending',
        '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) для окончательного удаления
    }
}
add_action('woocommerce_scheduled_delete_pending_orders', 'wc_auto_delete_pending_orders');

// Регистрируем CRON событие, если не существует
if (!wp_next_scheduled('woocommerce_scheduled_delete_pending_orders')) {
    wp_schedule_event(time(), 'daily', 'woocommerce_scheduled_delete_pending_orders');
}

2. Очистка корзины пользователей после определённого времени без активности

WooCommerce хранит корзину в сессии. Чтобы автоматически очищать корзины, можно использовать хук woocommerce_cart_loaded_from_session. Пример кода, который очищает корзину, если с момента последнего обновления прошло более 24 часов:

function wc_clear_cart_after_inactivity() {
    if (is_admin()) return; // Только фронтенд

    $cart = WC()->cart;
    if (!$cart) return;

    $last_update = WC()->session->get('cart_last_update');
    $now = time();

    if (!$last_update) {
        WC()->session->set('cart_last_update', $now);
        return;
    }

    $inactivity_limit = 24 * 60 * 60; // 24 часа

    if (($now - $last_update) > $inactivity_limit) {
        $cart->empty_cart(true);
        WC()->session->set('cart_last_update', $now);
    } else {
        WC()->session->set('cart_last_update', $now);
    }
}
add_action('woocommerce_cart_loaded_from_session', 'wc_clear_cart_after_inactivity');

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

  • Подождать минимум 1-2 дня после внедрения, чтобы сработал CRON для удаления старых заказов;
  • Проверить в админке WooCommerce — количество заказов в статусе pending должно уменьшиться;
  • Добавить товар в корзину, не совершать действия и проверить через 24 часа, что корзина очищена (можно проверить через новую анонимную сессию);
  • Просмотреть логи сервера и WooCommerce на предмет ошибок, связанных с удалением заказов и сессиями;
  • Для отладки можно добавить логирование в функции удаления/очистки.

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

  • CRON событие не срабатывает: проверьте, включён ли WP-Cron в настройках сервера или используйте системный cronjob для вызова wp-cron.php;
  • Удаление заказов не происходит: убедитесь, что используемый статус заказа совпадает с тем, что вы хотите удалять (pending, failed и т.п.);
  • Корзина не очищается: проверьте, что у пользователя включены куки и сессии WooCommerce корректно работают;
  • Потеря данных: перед удалением заказов убедитесь, что это безопасно и вы не удаляете актуальные заказы;
  • Конфликт с плагинами кеширования: кеш может мешать обновлению корзины и сессий, исключите страницы корзины и оформления из кеша.

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

  • Не удаляйте заказы сразу, используйте статус «корзина» или «pending» и время задержки не менее 7 дней;
  • Для очистки корзины не используйте слишком короткий таймаут, чтобы не испортить пользовательский опыт;
  • Регулярно оптимизируйте базу данных, удаляя мусорные данные — можно использовать плагин Clearfy Pro для автоматизации очистки и оптимизации;
  • Проверяйте логи WooCommerce и сервера, чтобы вовремя обнаруживать проблемы с сессиями и заказами;
  • Используйте кеширование с умом: исключайте страницы корзины и оформления из кеша, чтобы не создавать конфликтов.

Сравнение способов решения проблемы брошенных заказов и очистки корзины

МетодПлюсыМинусыПример
Ручное удаление заказовПростота, полный контрольЗатратно по времени, риск забытьЧерез админку WooCommerce
Код в functions.php (CRON)Автоматизация, гибкостьТребует настройки, возможны ошибки CRONПример кода выше
Плагины для брошенных корзинУведомления, статистикаДополнительная нагрузка, платные опцииAbandoned Cart Lite, WooCommerce Recover Abandoned Cart и др.
Как отключить пагинацию в WordPress без плагинов
25.02.2026
Как использовать meta-заголовки для управления отображением страниц WordPress
02.02.2026
Как создать динамические поля в WordPress через Meta Box с примерами кода
31.03.2026
Как удалить временные файлы кэша в WordPress: практическое руководство
09.03.2026
Как создать адаптивные блоки в WordPress с помощью Gutenberg
22.01.2026