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

Диагностика проблемы: корзина WooCommerce не очищается после оформления заказа

По умолчанию WooCommerce очищает корзину после успешной оплаты. Однако при использовании кастомных тем, плагинов или сложных кастомизаций, например, в теме GeneratePress, корзина может оставаться заполненной, что приводит к путанице у пользователей и дублированию заказов.

Типичные признаки проблемы:

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

Пошаговое решение: принудительная очистка корзины после успешной оплаты

Реализуем очистку корзины с помощью хука WooCommerce woocommerce_order_status_completed, который срабатывает, когда заказ переводится в статус "завершён". Это гарантирует, что корзина очистится только после полной обработки заказа.

add_action('woocommerce_order_status_completed', 'clear_cart_after_order_completed', 10, 1);
function clear_cart_after_order_completed($order_id) {
    if (is_admin()) return; // не выполняем в админке
    WC()->cart->empty_cart();
}

Важно добавлять проверку is_admin(), чтобы избежать неожиданного поведения в административной части.

Альтернативно, если вы хотите очистить корзину сразу после успешной оплаты (например, при переходе в статус processing), используйте:

add_action('woocommerce_order_status_processing', 'clear_cart_after_order_processing', 10, 1);
function clear_cart_after_order_processing($order_id) {
    if (is_admin()) return;
    WC()->cart->empty_cart();
}

Как добавить код в GeneratePress

Поместите этот код в файл functions.php дочерней темы GeneratePress или используйте плагин для добавления пользовательских сниппетов, например, Code Snippets.

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

  • Оформите тестовый заказ в магазине.
  • После успешной оплаты и перехода заказа в статус "завершён" (completed) обновите страницу корзины.
  • Корзина должна быть пустой, без сохранённых товаров.

Если корзина не очищается, проверьте, есть ли кэширование страниц или плагинов, которые могут сохранять состояние корзины. Отключите кэширование на страницах WooCommerce и повторите тест.

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

  • Код вставлен в основной файл темы GeneratePress: при обновлении темы изменения пропадут. Используйте дочернюю тему или плагин Code Snippets.
  • Отсутствует проверка is_admin(): может привести к очистке корзины в админке и ошибкам.
  • Кэширование страниц: плагин кэширования не обновляет корзину сразу — настройте исключения для страниц корзины и оформления заказа.
  • Конфликты с плагинами: некоторые расширения WooCommerce могут изменять логику корзины, отключите их поочередно для диагностики.

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

  • Не храните чувствительные данные в сессиях корзины — WooCommerce использует собственные механизмы, доверяйте им.
  • Используйте дочернюю тему GeneratePress для кастомизаций, чтобы избежать потери изменений при обновлении.
  • Отключите кэширование на страницах корзины и оформления заказа для корректной работы динамического контента.
  • Регулярно обновляйте WooCommerce и тему GeneratePress, чтобы избежать уязвимостей и багов.

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

СпособОписаниеПреимуществаНедостатки
Хук woocommerce_order_status_completed Очистка корзины после смены статуса заказа на завершённый Гарантирует, что заказ полностью обработан; минимальный риск ошибок Корзина очищается не сразу после оплаты, а после завершения заказа
Хук woocommerce_order_status_processing Очистка сразу после смены статуса на "обрабатывается" Корзина очищается быстрее, удобнее для пользователей Риск очистить корзину, если заказ не будет завершён
Очистка через JavaScript на странице «Спасибо» Очистка корзины на фронтенде после заказа Простая реализация, не требует серверных изменений Менее надежно, можно пропустить очистку при ошибках JS
Как создать динамические отзывы с подгрузкой в GeneratePress
06.01.2026
WooCommerce: как отключить комментарии и оценки на странице товара в GeneratePress
14.05.2026
WooCommerce: как удалить атрибуты из фильтра после удаления товара в GeneratePress
02.06.2026
Как создать автоматические отзывы в GeneratePress с помощью плагинов
02.01.2026
Как добавить уникальные метаданные для страниц в GeneratePress
09.12.2025