Автоматическое удаление товара из корзины WooCommerce после оплаты в GeneratePress

Почему после оплаты товары остаются в корзине WooCommerce?

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

Диагностика проблемы с очисткой корзины

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

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

Для надежного удаления товаров из корзины сразу после успешного платежа добавим кастомный код в файл functions.php дочерней темы GeneratePress или в сниппет-плагин.

add_action('woocommerce_order_status_completed', 'clear_cart_after_payment', 10, 1);
function clear_cart_after_payment($order_id) {
    if ( ! WC()->cart ) {
        return;
    }
    WC()->cart->empty_cart();
}

Этот хук срабатывает при смене статуса заказа на "завершён" (completed), что обычно означает успешную оплату и отправку заказа.

Если вы хотите очищать корзину сразу после оплаты (независимо от статуса), можно использовать хук woocommerce_thankyou:

add_action('woocommerce_thankyou', 'clear_cart_after_payment_thankyou');
function clear_cart_after_payment_thankyou($order_id) {
    if ( ! WC()->cart ) {
        return;
    }
    WC()->cart->empty_cart();
}

Учет особенностей GeneratePress

В GeneratePress иногда кэш страницы влияет на отображение корзины. Рекомендуется добавить заголовки для отключения кеширования страниц с корзиной и страницей благодарности в настройках кэш-плагина. Также стоит проверить, что корзина отображается через AJAX, чтобы обновления были моментальными.

Как проверить, что корзина очищается после оплаты

  • Оформите тестовый заказ с любым товаром.
  • После перехода на страницу благодарности (Thank You page) откройте корзину — она должна быть пустой.
  • Если корзина не пуста, очистите кэш браузера и сайта и повторите тест.
  • Используйте консоль разработчика (F12) и вкладку Network, чтобы убедиться, что AJAX-запросы к корзине проходят без ошибок.

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

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

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

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

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

ВариантПлюсыМинусыРекомендации
Хук woocommerce_order_status_completedСрабатывает при окончательном статусе заказа, безопасноКорзина очищается только после смены статуса, возможна задержкаИспользовать для заказов с длительной обработкой
Хук woocommerce_thankyouМоментальное очищение после оплаты и перехода на страницу благодарностиНе всегда означает успешную доставку заказаИспользовать для интернет-магазинов с мгновенной оплатой
Отключение кэширования страницы корзиныОбеспечивает актуальное состояние корзиныМожет снизить производительность сайтаТребуется балансировать с кэшированием
Как создать внутреннюю кэширу в GeneratePress для ускорения загрузки сайта
30.03.2026
Как использовать Gutenberg в GeneratePress для создания сложных макетов
09.01.2026
Добавление поддержки локализации в тему GeneratePress
30.12.2025
Как добавить динамические заголовки H1 в GeneratePress для улучшения SEO
04.04.2026
Как создать динамические блоки с подгрузкой в GeneratePress для улучшения производительности
16.12.2025