WooCommerce: Автоматическое удаление товаров из корзины при ошибках оформления заказа

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

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

Проверить эту проблему можно, оформив тестовый заказ с ошибочными данными (например, неверный адрес или отключенный способ оплаты). Если после возврата на страницу корзины товары остаются и не обновляются, значит, стандартного механизма очистки корзины нет.

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

1. Использование хука 'woocommerce_checkout_order_processed' с проверкой статуса

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

add_action('woocommerce_checkout_order_processed', 'wpin_clear_cart_on_order_error', 10, 3);function wpin_clear_cart_on_order_error($order_id, $posted_data, $order){    if (!$order instanceof WC_Order) {        return;    }    // Проверяем статус заказа    $status = $order->get_status();    // Если статус 'failed' или 'cancelled', очищаем корзину    if (in_array($status, array('failed', 'cancelled'))) {        WC()->cart->empty_cart();    }}

2. Очистка корзины после неудачной попытки оплаты через хук 'woocommerce_payment_complete'

Иногда полезно очистить корзину, если платеж не прошел, чтобы избежать повторных попыток с теми же товарами.

add_action('woocommerce_payment_complete', 'wpin_clear_cart_after_payment');function wpin_clear_cart_after_payment($order_id) {    $order = wc_get_order($order_id);    if (!$order) {        return;    }    // Если статус не 'completed', очищаем корзину    if ($order->get_status() !== 'completed') {        WC()->cart->empty_cart();    }}

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

  • Создайте тестовый заказ с ошибочными данными, например, неверным адресом или отключенным способом оплаты.
  • Завершите попытку оформления, чтобы заказ перешёл в статус failed или cancelled.
  • Вернитесь на страницу корзины и убедитесь, что товары из неё были удалены автоматически.
  • Проверьте успешный заказ — корзина должна очищаться стандартно после оплаты.

Частые ошибки и способы их исправления

  • WC()->cart возвращает null или корзина не очищается: Убедитесь, что код вызывается в контексте сессии пользователя (фронтенд). Если код выполняется в админке, корзина пользователя не доступна.
  • Код не срабатывает при статусах заказов: Проверьте, что статусы заданные в условии (failed, cancelled) соответствуют статусам вашего магазина. Статусы можно посмотреть в WooCommerce → Настройки → Статусы заказов.
  • Конфликты с другими плагинами: Отключите плагины, которые могут модифицировать поведение корзины или заказов, чтобы исключить конфликт.

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

  • Код добавляйте в дочернюю тему или в отдельный плагин, чтобы не потерять изменения при обновлении.
  • Не вызывайте WC()->cart->empty_cart() на страницах без сессии пользователя — это может привести к ошибкам.
  • При большом трафике внимательно следите за нагрузкой вызова функции очистки корзины — она должна срабатывать только при необходимости.

Чек-лист для внедрения автоматического удаления товаров из корзины при ошибках заказа

  1. Добавить код в файл functions.php дочерней темы или создать отдельный плагин.
  2. Проверить, что WooCommerce активен и загружен перед использованием функций.
  3. Протестировать сценарии с успешным и неуспешным заказом.
  4. Убедиться, что корзина очищается корректно только при ошибках.
  5. Отследить возможные конфликты с другими кастомизациями или плагинами.

Таблица сравнения способов очистки корзины при ошибках в WooCommerce

МетодПлюсыМинусыРекомендации
Хук woocommerce_checkout_order_processedРеагирует сразу после оформления заказа, можно проверить статусНе всегда срабатывает при ошибках платежей вне WooCommerceПодходит для базовой очистки при ошибочных заказах
Хук woocommerce_payment_completeОбрабатывает результат оплаты, можно очистить в случае неуспехаНе срабатывает при отмененных заказах без попытки оплатыИспользовать в связке с первым методом для максимального охвата
Настройка сессии пользователя + JSМожно реализовать мгновенную очистку на фронтендеСложнее в реализации, зависит от клиентаДополнительно для UX, но не замена серверной логики
Как отключить Emoji в WordPress для ускорения сайта
16.04.2026
Как удалить или изменить URL редирект в WordPress
24.02.2026
Как установить лимит на количество публикаций в WordPress для пользователей
07.01.2026
Установка и настройка WPRemark для управления отзывами на WordPress
24.12.2025
WooCommerce: отключение автоматического обновления корзины при изменении вариантов товара
09.06.2026