WooCommerce: как автоматически удалять товар из корзины после оплаты

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

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

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

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

Добавление кода в functions.php или кастомный плагин

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

add_action('woocommerce_thankyou', 'wplock_clear_cart_after_payment', 10, 1);
function wplock_clear_cart_after_payment($order_id) {
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);
    if (!$order || $order->get_status() !== 'processing' && $order->get_status() !== 'completed') {
        return; // Очистка только для успешных заказов
    }

    WC()->cart->empty_cart();
}

Этот код проверяет, что заказ существует и имеет статус processing или completed, что означает успешную оплату, и очищает корзину.

Особенности для кешированных сайтов и плагинов кеширования

Если сайт использует кеширование, нужно убедиться, что страницы корзины и оформления заказа исключены из кеша. Для популярных плагинов кеширования (WP Rocket, W3 Total Cache, LiteSpeed Cache) настройте исключения для URL корзины (/cart) и оформления заказа (/checkout).

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

  1. Очистите кеш браузера и кеш сайта.
  2. Добавьте товар в корзину.
  3. Оформите заказ и оплатите его (можно использовать тестовый режим платежного шлюза).
  4. После перенаправления на страницу благодарности проверьте корзину — она должна быть пустой.
  5. Если корзина не очищается — проверьте, вызывается ли хук woocommerce_thankyou и нет ли ошибок в логах.

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

  • Корзина не очищается при использовании внешних платежных систем: Некоторые шлюзы не возвращают пользователя на стандартную страницу благодарности или не вызывают нужные хуки. Решение — добавить очистку корзины по вебхуку или кастомному событию платежного шлюза.
  • Кеширование страницы корзины мешает обновлению: Проверьте настройки плагинов кеширования и исключите страницы /cart и /checkout из кеша.
  • Очистка корзины происходит до завершения оплаты: Проверьте, что код запускается только при статусах processing и completed, иначе товар может удалиться преждевременно.
  • Ошибка "undefined function WC()": Добавляйте код в хуки, которые вызываются после инициализации WooCommerce, например woocommerce_thankyou, а не напрямую в functions.php.

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

  • Не используйте empty_cart() в хуках, связанных с оплатой, если есть вероятность повторных запросов — это может очистить корзину преждевременно.
  • Для сложных сценариев с несколькими платежными шлюзами используйте вебхуки и асинхронную обработку для надежности.
  • Соблюдайте порядок вызова хуков — например, очистка корзины должна происходить после подтверждения оплаты.
  • Используйте логи (error_log или плагины для логирования) для отладки, если корзина не очищается.

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

МетодОписаниеПлюсыМинусы
Хук woocommerce_thankyouОчистка корзины на странице благодарностиПростота, надежность при стандартных шлюзахНе работает с платежами без возврата на сайт
Вебхуки платежных системОбработка подтверждения оплаты от платежного сервисаНезависимость от возврата пользователя на сайтСложность настройки, требует дополнительного кода
Кастомные хуки платежных плагиновПодписка на события плагинов (например, Stripe, PayPal)Точный контроль, работает с разными шлюзамиЗависимость от плагина, риск несовместимости при обновлении
Как отключить отправку писем WordPress без удаления плагинов
10.02.2026
Как закрыть доступ к административной панели WordPress для посторонних
15.12.2025
Как удалить или отключить плагин WordPress: практическое руководство
09.04.2026
Как добавить поддержку страниц со строительным кодом в WooCommerce
20.04.2026
WooCommerce: как автоматически удалять товары из заказа после оплаты
31.05.2026