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

Диагностика проблемы с отсутствием товаров на складе в WooCommerce

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

Чтобы подтвердить проблему, добавьте в корзину товар с количеством 1. Затем в админке выставьте для этого товара запас 0 и попробуйте оформить заказ. Если WooCommerce позволит оформить заказ или покажет ошибку на этапе оформления, значит корзина не обновляется автоматически.

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

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

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

add_action('woocommerce_check_cart_items', 'remove_out_of_stock_items_from_cart');
function remove_out_of_stock_items_from_cart() {
    foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {
        $product = $cart_item['data'];
        if (!$product->is_in_stock()) {
            WC()->cart->remove_cart_item($cart_item_key);
            wc_add_notice(sprintf('Товар "%s" удалён из корзины, так как отсутствует на складе.', $product->get_name()), 'error');
        }
    }
}

2. Обработка AJAX для динамического обновления корзины без перезагрузки страницы

Чтобы пользователь видел обновления сразу, нужно добавить AJAX-обработку. WooCommerce уже использует AJAX для обновления корзины, но кастомный код можно дополнить, например, так:

add_action('wp_ajax_check_cart_stock', 'ajax_check_cart_stock');
add_action('wp_ajax_nopriv_check_cart_stock', 'ajax_check_cart_stock');
function ajax_check_cart_stock() {
    remove_out_of_stock_items_from_cart();
    wp_send_json_success(array('message' => 'Корзина обновлена')); 
}

И вызвать этот AJAX из JS при загрузке страницы корзины.

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

  • Добавьте в корзину товар с положительным запасом.
  • Обнулите запас товара в админке WooCommerce.
  • Обновите страницу корзины — товар должен исчезнуть, а на экране появится уведомление.
  • Попробуйте оформить заказ с отсутствующим товаром — корзина должна обновиться и запретить оформление.

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

  • Код не срабатывает: Проверьте, что функция подключена к хуку woocommerce_check_cart_items и что корзина доступна (она загружена).
  • Сообщение об удалении не отображается: Убедитесь, что в теме есть вывод сообщений WooCommerce через wc_print_notices().
  • Товары не удаляются при обновлении без перезагрузки: Нужно добавить JS, который будет вызывать AJAX для проверки и обновления корзины после изменений.
  • Проблемы с кэшированием: Используйте исключения для страниц корзины и оформления заказа в плагинах кэширования.

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

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

Сравнение вариантов реализации автоматического удаления товаров из корзины

МетодПреимуществаНедостаткиКогда использовать
Добавление кода в functions.php Быстро, без сторонних плагинов, полный контроль Требует навыков PHP, нужно поддерживать самостоятельно Для небольших сайтов и разработчиков
Использование плагина (например, Out of Stock Manager) Готовое решение, поддержка, дополнительные функции Может влиять на производительность, зависит от разработчика Для крупных магазинов и без опыта кода
Комбинация кода и AJAX Обновление корзины без перезагрузки, лучше UX Сложнее в реализации, требует JS навыков Для профессиональных решений
WooCommerce: Автоматическое удаление товаров из корзины при ошибках оформления заказа
03.06.2026
WooCommerce не отображает варианты товаров: практическое руководство
06.05.2026
Как добавить уникальное поле в REST API WordPress с примерами кода
01.02.2026
Как создать настройки плагина WordPress с примерами кода
16.02.2026
WooCommerce: Обновление стоимости в корзине при изменении атрибутов товара
13.05.2026