В чем проблема с товарами, которых нет в наличии
В WooCommerce по умолчанию товары с нулевым запасом могут оставаться видимыми и доступными для покупки, если не настроены правильные параметры управления запасами. Это приводит к неудобству для покупателей и дополнительной работе для администраторов сайта.
Диагностика: как проверить, что товары с нулевым запасом не отключаются
- Перейдите в админку WooCommerce > Товары и выберите товар с нулевым количеством.
- Откройте страницу редактирования товара и проверьте вкладку "Запасы": активирована ли опция "Управление запасами на уровне товара" и установлен ли статус наличия.
- На фронтенде откройте страницу товара с нулевым запасом и убедитесь, что кнопка "Купить" доступна.
Если товары доступны для покупки при нулевом запасе, значит автоматическое отключение не настроено.
Пошаговое решение: отключаем товары при отсутствии на складе
1. Настройка управления запасами в WooCommerce
Для начала убедитесь, что в настройках WooCommerce включено управление запасами:
WooCommerce > Настройки > Товары > Запасы > Включить управление запасами (галочка)Это позволит системе автоматически отслеживать наличие товара.
2. Использование статуса наличия товара
По умолчанию WooCommerce позволяет задать статус наличия:
- В наличии
- Нет в наличии
- Под заказ
В настройках товара выберите "Нет в наличии" для товаров с нулевым запасом.
3. Автоматизация через код: отключение товаров с нулевым запасом
Чтобы автоматизировать процесс и не менять статус вручную, добавьте следующий код в functions.php вашей дочерней темы или в плагин для сайта:
add_action('woocommerce_product_set_stock_status', 'disable_product_if_out_of_stock', 10, 3);
function disable_product_if_out_of_stock($product_id, $stock_status, $product) {
if ($stock_status === 'outofstock') {
$post = array(
'ID' => $product_id,
'post_status' => 'draft' // переводим в черновики, чтобы не показывался
);
wp_update_post($post);
} else {
// Если товар снова в наличии, публикуем
$post = array(
'ID' => $product_id,
'post_status' => 'publish'
);
wp_update_post($post);
}
}Этот хук срабатывает при изменении статуса запаса товара, переводя товар в статус "черновик", если он отсутствует на складе, и обратно в "опубликовано", когда товар появляется.
4. Проверка работы кода
- Измените количество товара на 0 в админке.
- Сохраните изменения.
- Проверьте, что товар исчез с витрины и страницы каталога.
- Увеличьте количество товара на любое положительное число и сохраните.
- Убедитесь, что товар снова отображается на сайте.
Проверка результата после внедрения
Для полной проверки:
- Проверьте фронтенд сайта с разными товарами: с нулевым запасом и с положительным.
- Проверьте URL товара в статусе "черновик" — он должен быть недоступен (ошибка 404).
- Проверьте в админке, что статус товара меняется автоматически.
- Для теста можно использовать WP-CLI:
— здесь должны появиться отключенные товары.wp post list --post_status=draft --post_type=product
Частые ошибки и как их исправить
- Код не срабатывает при изменении количества: убедитесь, что опция управления запасами включена в настройках WooCommerce.
- Товар не исчезает с фронтенда: проверьте, что статус "черновик" действительно исключен из публичного вывода. Если используется кэширование — очистите кэш.
- Конфликты с плагинами SEO или кэширования: иногда плагины могут сохранять устаревший статус товара. Временно отключите их для проверки.
- Изменение статуса товара влияет на SEO: если важно сохранить URL, вместо перевода в черновик можно использовать альтернативный статус или мета-поле для фильтрации товаров на фронтенде.
Практические советы по безопасности и производительности
- Добавляйте код в дочернюю тему или собственный плагин, чтобы избежать потери изменений при обновлении.
- Избегайте тяжелых операций в хуках, особенно на сайтах с большим каталогом.
- Для сайтов с большим трафиком используйте отложенное обновление статусов через WP-Cron, чтобы не тормозить сохранение товара.
- Регулярно проверяйте логи ошибок сервера для выявления проблем с кодом.
Сравнение вариантов решения отключения товаров по запасам
| Метод | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Ручное изменение статуса товара | Просто, не требует кода | Трудозатратно при большом каталоге | Маленький магазин |
| Автоматизация через код (из статьи) | Полная автоматизация, быстрое срабатывание | Требует навыков, возможны конфликты с плагинами | Средние и большие магазины |
| Использование сторонних плагинов управления запасами | Расширенный функционал и настройка | Дополнительная нагрузка на сайт, стоимость | Крупные проекты с требованиями к интеграции |