Диагностика проблемы с отсутствием товаров на складе
В WooCommerce часто возникает задача автоматически скрывать или отключать товары и вариации, которых нет в наличии. Это особенно актуально для магазинов с большим ассортиментом и динамическими остатками. Если этого не делать вручную, покупатель может оформить заказ на товар, которого нет, что ведет к отменам и снижению доверия.
Проверить проблему можно так:
- Перейдите в админку WooCommerce > Товары и откройте карточку товара.
- Посмотрите параметры управления запасами и статус наличия.
- Если товар имеет статус "В наличии", но фактически его нет, значит, автоматизация отключения не настроена.
- Для вариаций проверьте каждый вариант: отсутствующие должны иметь статус "Нет в наличии".
Как автоматически отключать товары без наличия
WooCommerce по умолчанию позволяет управлять запасами и автоматически менять статус товара на "Нет в наличии". Но для полного отключения (чтобы товар не отображался в каталоге) нужна дополнительная логика.
Реализуем это с помощью фильтра woocommerce_product_is_visible, который отвечает за отображение товара в каталоге и поиске.
add_filter('woocommerce_product_is_visible', 'hide_out_of_stock_products', 10, 2);
function hide_out_of_stock_products($visible, $product_id) {
$product = wc_get_product($product_id);
if (!$product->is_in_stock()) {
return false; // скрыть товар из каталога
}
return $visible;
}Этот код нужно добавить в файл functions.php вашей темы или в кастомный плагин.
Автоматическое отключение вариаций товаров
Для вариаций логика похожа, но нужно учитывать, что вариации — отдельные объекты типа WC_Product_Variation. Если вариация отсутствует, она должна быть скрыта из выбора на странице товара.
add_filter('woocommerce_variation_is_active', 'hide_out_of_stock_variations', 10, 2);
function hide_out_of_stock_variations($is_active, $variation) {
if (!$variation->is_in_stock()) {
return false; // скрываем вариацию
}
return $is_active;
}Пошаговое руководство по внедрению
- Сделайте бэкап сайта и базы данных.
- Откройте файл
functions.phpвашей дочерней темы или создайте кастомный плагин. - Вставьте оба кода из раздела выше для отключения товаров и вариаций.
- Сохраните изменения и очистите кеш сайта и браузера.
- Проверьте наличие товаров и вариаций, изменив их статус наличия на "Нет в наличии".
Как проверить, что решение работает
- Перейдите на страницу магазина — товары без наличия должны исчезать из списка.
- Откройте страницу товара с вариациями — отсутствующие вариации не должны отображаться в селекторе вариаций.
- Попробуйте напрямую перейти по ссылке на отключённый товар — он должен возвращать 404 или отсутствовать.
Частые ошибки и как их исправить
- Товары видны, хотя на складе нет: Проверьте, что у товара включён учёт запасов (в настройках товара «Управлять запасами» должно быть активно).
- Вариации не скрываются: Убедитесь, что код добавлен именно в
functions.phpактивной темы или в плагине, и что кэш очищен. - Проблемы с кэшированием: Если используется кеширование страниц, добавьте исключения для страниц магазина и товаров или отключите кэш во время тестирования.
- Ошибка PHP после добавления кода: Проверьте синтаксис и корректность копирования, используйте отладчик или лог ошибок сервера.
Практические советы по безопасности и производительности
- Не используйте сторонние плагины для этой задачи без необходимости — кастомный код легче контролировать и он быстрее.
- Добавляйте коды в дочернюю тему или отдельный плагин, чтобы избежать потери изменений при обновлении.
- Тестируйте на тестовом сайте перед применением на боевом.
- Регулярно обновляйте WooCommerce и тему, чтобы избежать конфликтов с API.
Сравнение способов реализации
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Код в functions.php | Фильтры WooCommerce для скрытия товаров и вариаций | Легковесно, полное управление, без доп. плагинов | Требует навыков PHP, возможны ошибки при правках |
| Плагины (например, Hide Out of Stock) | Готовые решения для скрытия отсутствующих товаров | Простота установки, UI для настройки | Дополнительная нагрузка, возможны конфликты, платные функции |