Диагностика проблемы: почему товары не отключаются при нулевом остатке
В WooCommerce опция автоматического скрытия или отключения товаров при отсутствии запасов иногда не работает, даже если включён складской учёт. Чаще всего этому причиной являются:
- Неправильные настройки управления запасами в карточках товаров
- Конфликты с темой или плагинами, которые переопределяют отображение товаров
- Кеширование страниц, из-за которого изменения статуса товара не отображаются
- Ошибки в пользовательских функциях, связанных с управлением запасами
Как проверить, активирован ли складской учёт и опция скрытия
- Перейдите в WooCommerce > Настройки > Товары > Запасы.
- Убедитесь, что включена опция «Включить управление запасами» (
enable stock management). - Проверьте, что активна опция «Скрывать товары без запасов» (
out of stock visibility), она отвечает за автоматическое скрытие товаров, если запас равен нулю.
Пошаговое решение: как правильно настроить автоматическое отключение товаров
1. Включение управления запасами для конкретных товаров
В карточке товара на вкладке «Запасы» убедитесь, что отмечено Включить управление запасами на уровне товара. Без этого WooCommerce не будет отслеживать остатки для данного товара.
update_post_meta( $product_id, '_manage_stock', 'yes' );2. Включение скрытия товаров без запасов в настройках WooCommerce
add_filter( 'woocommerce_product_is_visible', function( $visible, $product_id ) {
$product = wc_get_product( $product_id );
if ( ! $product->is_in_stock() ) {
return false;
}
return $visible;
}, 10, 2 );Этот код можно добавить в файл functions.php темы, если настройки по умолчанию не работают.
3. Очистка кеша и проверка кеш-плагинов
Если у вас установлен кеширующий плагин (например, WP Rocket, W3 Total Cache, или др.), очистите кеш сайта полностью и отключите плагин на время тестирования. Иногда кеш не обновляет статус товаров.
4. Проверка темы и плагинов на конфликты
Активируйте стандартную тему (например, Storefront) и отключите все плагины, кроме WooCommerce. Проверьте, работает ли автоматическое скрытие. Если да, включайте плагины по одному, чтобы выявить конфликтующий.
Проверка результата после внедрения решений
- Создайте тестовый товар с включённым складским учётом и выставьте запас = 0.
- Обновите страницу каталога и карточку товара с отключённым кешем.
- Товар должен быть скрыт или кнопка «В корзину» должна быть неактивна.
- Если используется кастомная тема, проверьте вывод
$product->is_in_stock()— он должен возвращатьfalseдля товаров без запасов.
Частые ошибки и как их исправить
- Ошибка: Включено управление запасами глобально, но отключено на уровне товара.
Исправление: Включите управление запасами для каждого товара вручную или через код. - Ошибка: Кеш не обновляет отображение товаров.
Исправление: Очистите кеш и отключите кеширующие плагины на время теста. - Ошибка: Кастомная тема переопределяет шаблоны WooCommerce без учёта статуса запасов.
Исправление: Отредактируйте шаблоны, используя проверку$product->is_in_stock(). - Ошибка: Плагины управления каталогом или складом конфликтуют с WooCommerce.
Исправление: Проверьте совместимость и обновите плагины.
Практические советы по безопасности и производительности
- Используйте транзиенты или объектный кеш для хранения статуса запасов, если у вас большой каталог, чтобы снизить нагрузку на базу данных.
- Регулярно обновляйте WooCommerce и плагины, чтобы избежать уязвимостей, связанных с управлением запасами.
- При использовании сторонних плагинов для управления запасами проверяйте, как они влияют на отображение товаров без запасов.
Таблица сравнения вариантов решения
| Метод | Преимущества | Недостатки | Применимость |
|---|---|---|---|
| Встроенные настройки WooCommerce | Простота настройки, не требует кода | Иногда не работает с кастомными темами | Подходит для большинства сайтов |
Код в functions.php с фильтром woocommerce_product_is_visible | Гибкость, работает с кастомными темами | Требует базовых знаний PHP | Для разработчиков и продвинутых пользователей |
| Плагины управления запасами | Дополнительные функции, отчёты | Могут конфликтовать и замедлять сайт | Для крупных магазинов с расширенным учётом |