Как автоматически отключить кнопку «Добавить в корзину» в WooCommerce при отсутствии товара

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

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

Для правильной работы интернет-магазина важно автоматически отключать кнопку при отсутствии товара или замещать её сообщением о недоступности.

Пошаговое решение: как автоматически отключить кнопку в WooCommerce при отсутствии товара

1. Проверка настроек управления запасами в WooCommerce

Перейдите в WooCommerce → Настройки → Товары → Управление запасами и убедитесь, что опция Включить управление запасами активирована. Это позволит WooCommerce отслеживать наличие товаров.

2. Использование фильтра для отключения кнопки «Добавить в корзину»

Добавьте следующий код в файл functions.php вашей дочерней темы или в собственный плагин:

add_filter('woocommerce_is_purchasable', 'disable_add_to_cart_if_out_of_stock', 10, 2);
function disable_add_to_cart_if_out_of_stock($purchasable, $product) {
    if (!$product->is_in_stock()) {
        return false; // Отключаем кнопку добавления в корзину
    }
    return $purchasable;
}

Этот фильтр проверяет наличие товара и возвращает false, если товар отсутствует, тем самым отключая кнопку.

3. Замена кнопки на сообщение о недоступности

Для более информативного интерфейса можно заменить кнопку на текст. Добавьте в functions.php следующий код:

add_action('woocommerce_single_product_summary', 'replace_add_to_cart_button', 31);
function replace_add_to_cart_button() {
    global $product;
    if (!$product->is_in_stock()) {
        remove_action('woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30);
        echo '<p class="stock out-of-stock">Товар временно отсутствует</p>';
    }
}

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

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

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

  • Кнопка не отключается, хотя товара нет: Проверьте, активировано ли управление запасами в WooCommerce и правильно ли задан статус товара В наличии или Нет в наличии.
  • Кнопка отсутствует на все товары: Возможно, фильтр подключён некорректно или конфликтует с плагинами. Отключите сторонние плагины для проверки.
  • Сообщение о недоступности не отображается: Убедитесь, что приоритет хуков не перекрывает функцию замены кнопки. В примере используется приоритет 31, можно увеличить его.

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

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

Сравнение способов решения

МетодОписаниеПлюсыМинусы
Встроенные настройки WooCommerce Включение управления запасами и настройка статусов Простота, без кода Ограниченная кастомизация отображения
Фильтр woocommerce_is_purchasable Отключение кнопки программно при отсутствии товара Гибкость, можно контролировать логику Требуется знание PHP, возможны конфликты с плагинами
Замена кнопки на сообщение Улучшение UX с информированием пользователя Понятность для пользователя Нужно аккуратно прописывать хуки, чтобы не сломать шаблон
Как автоматически удалять старые медиафайлы в WordPress
16.04.2026
Как использовать хук pre_get_posts для изменения запросов в WordPress
20.04.2026
Автоматическое удаление забытых meta-полей в WordPress для оптимизации базы данных
03.04.2026
Как использовать REST API в WordPress для создания собственных настроек
25.11.2025
WooCommerce: автоматическое изменение цены товара при изменении количества
22.06.2026