Как автоматически очищать корзину WooCommerce после покупки

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

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

Как выявить проблему

  • Проверьте, происходит ли очистка корзины после стандартного оформления заказа с включёнными стандартными плагинами;
  • Отключите сторонние плагины, влияющие на корзину и оплату, и проверьте повторно;
  • Проверьте кастомные хуки и обработчики на предмет вмешательства в процесс очистки корзины;
  • Посмотрите консоль браузера и логи сервера на предмет ошибок JavaScript и PHP.

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

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

add_action('woocommerce_thankyou', 'custom_clear_cart_after_purchase', 10, 1);function custom_clear_cart_after_purchase($order_id) {  if (!$order_id) return;  $order = wc_get_order($order_id);  if (!$order) return;  $user_id = $order->get_user_id();  // Очистка корзины для текущего пользователя  if (WC()->cart) {    WC()->cart->empty_cart();  }}

Этот код гарантирует, что корзина очистится сразу после того, как заказ зарегистрирован и пользователь попадает на страницу благодарности.

Дополнительная проверка для пользователей без сессии

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

add_action('template_redirect', 'clear_cart_on_thankyou_page');function clear_cart_on_thankyou_page() {  if (is_order_received_page() && WC()->cart) {    WC()->cart->empty_cart();  }}

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

  • Сделайте тестовый заказ на сайте, пройдя до страницы благодарности;
  • После перехода на страницу «Спасибо за заказ» проверьте содержимое корзины — она должна быть пустой;
  • Обновите страницу или перейдите на страницу корзины — товары должны отсутствовать;
  • Повторите тест с разными браузерами и в режиме инкогнито, чтобы исключить влияние кэша и сессий.

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

  • Код не срабатывает из-за кеширования страниц: Отключите кеширование для страниц оформления заказа и благодарности или добавьте исключения для URL /checkout/ и /order-received/.
  • Корзина не очищается при использовании сторонних платежных шлюзов: Проверьте, вызывается ли хук woocommerce_thankyou у платежного шлюза; если нет, добавьте вызов очистки вручную после успешного платежа.
  • Пользователь не авторизован, и корзина сохраняется в сессии, но не очищается: Используйте дополнительный хук template_redirect для очистки корзины на странице благодарности, как показано выше.
  • Кастомные плагины или темы перезаписывают логику корзины: Проверьте их код и взаимодействие с корзиной, отключите конфликтующие функции.

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

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

Сравнение методов очистки корзины WooCommerce

МетодПреимуществаНедостаткиПрименимость
Хук woocommerce_thankyouГарантированное срабатывание после завершения заказа, нативный методНе срабатывает, если платежный шлюз не вызывает хукЛучший вариант для стандартных платежей
Хук template_redirect с проверкой страницы благодарностиРаботает для всех пользователей, включая гостейМожет сработать лишний раз при обновлении страницыДополнительный метод для надежности
Кастомные вызовы очистки в платежных шлюзахПолный контроль над процессом очисткиТребует правок в плагинах, может сломаться при обновленииДля нестандартных платежных решений
Как сделать автоматическое удаление заказов WooCommerce после 30 дней
10.05.2026
Как создать автоматические бэкапы WordPress: практическое руководство
18.11.2025
Как создать производительный кеш для WordPress без плагинов
25.02.2026
Как автоматизировать удаление неработающих шорткодов в WordPress
11.03.2026
Как правильно удалить незаконченые заказы WooCommerce через PHP
16.06.2026