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

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

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

Чтобы избежать этого, нужно автоматически отключать способы оплаты, если в корзине есть товары с нулевым запасом. Проверим, возникает ли такая ситуация на вашем сайте:

  • Добавьте в корзину товар с количеством на складе 0;
  • Перейдите к оформлению заказа;
  • Проверьте, доступны ли способы оплаты.

Если способы оплаты доступны, несмотря на отсутствие товара на складе, значит, нужна доработка.

Как автоматически отключить способы оплаты при отсутствии товара на складе

Общая идея решения

С помощью фильтра woocommerce_available_payment_gateways мы можем программно отключить определённые методы оплаты, если в корзине есть товары с нулевым количеством на складе.

Пример рабочего кода

add_filter('woocommerce_available_payment_gateways', 'disable_payment_if_no_stock');
function disable_payment_if_no_stock($available_gateways) {
    if (is_admin()) return $available_gateways; // Не применяем в админке
    
    $cart = WC()->cart->get_cart();
    foreach ($cart as $cart_item) {
        $product = $cart_item['data'];
        if (!$product->is_in_stock()) {
            // Отключаем все способы оплаты
            return array();
        }
    }
    return $available_gateways;
}

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

Отключение выборочных способов оплаты

Если нужно отключать не все способы, а только, например, cod (оплата при получении) и cheque, то код меняется так:

add_filter('woocommerce_available_payment_gateways', 'disable_specific_payments_if_no_stock');
function disable_specific_payments_if_no_stock($available_gateways) {
    if (is_admin()) return $available_gateways;
    $cart = WC()->cart->get_cart();
    foreach ($cart as $cart_item) {
        $product = $cart_item['data'];
        if (!$product->is_in_stock()) {
            unset($available_gateways['cod']);
            unset($available_gateways['cheque']);
            break;
        }
    }
    return $available_gateways;
}

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

  1. Добавьте в корзину товар с нулевым запасом.
  2. Перейдите на страницу оформления заказа.
  3. Убедитесь, что способы оплаты либо полностью отсутствуют, либо отсутствуют выбранные вами (например, cod и cheque).
  4. Добавьте в корзину товар с положительным запасом, убедитесь, что способы оплаты доступны.

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

  • Код не работает в админке. Это нормально, фильтр применяется только на фронтенде. В админке оплату отключать не нужно.
  • Способы оплаты не отключаются, хотя товара нет на складе. Проверьте, что у товаров действительно выставлен статус «нет в наличии» (is_in_stock() возвращает false). Иногда товар может иметь запас 0, но быть доступным для заказа (backorders). Нужно отключить backorders для корректной работы.
  • После обновления WooCommerce код перестал работать. Проверьте актуальность хуков и методов, возможно, изменился API.

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

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

Сравнение вариантов реализации

МетодПлюсыМинусыКогда использовать
Отключение всех способов оплатыПростая реализация, гарантирует отсутствие оплаты при отсутствии товаровПользователь не видит причины, может уйти с сайтаМагазин с ограниченными способами оплаты, нужно быстрое решение
Отключение отдельных способов оплатыГибкий контроль, сохраняет альтернативные способыТребует настройки списка отключаемых методовНужно поддерживать разные способы оплаты для разных условий
Использование плагинов управления запасамиРасширенные функции, интеграция с другими системамиДополнительные расходы, нагрузка на сайтБольшие магазины с комплексным управлением запасами
Как добавить автоматическое заполнение формы в WordPress
09.02.2026
Оптимизация изображений в WordPress: улучшение скорости без потери качества
17.11.2025
Автоматическое удаление неактивных пользователей WordPress
27.03.2026
Автоматическое удаление старого медиа-контента в WordPress
09.04.2026
Автоматическое отключение внешних embed-контентов в WordPress для ускорения сайта
19.03.2026