Диагностика проблемы с отображением товаров без наличия
При управлении интернет-магазином на WooCommerce часто возникает необходимость автоматически скрывать или отключать товары, количество которых достигло нуля. Это предотвращает возможность покупки отсутствующих товаров и улучшает пользовательский опыт. Однако стандартные настройки WooCommerce не всегда обеспечивают нужную автоматизацию, что приводит к ошибкам и ручному управлению.
Как проверить, что товар отображается некорректно при отсутствии наличия
- Перейдите на страницу товара с количеством 0 в админке (WooCommerce > Товары).
- Проверьте, отображается ли товар на витрине сайта.
- Если товар продаётся или доступен к просмотру, несмотря на отсутствие наличия, значит автоматическое отключение не работает.
Пошаговое решение: автоматическое отключение товаров при отсутствии наличия
Для реализации автоматического выключения товаров при нулевом количестве воспользуемся хуком woocommerce_product_set_stock, который вызывается при обновлении количества товара.
Добавьте следующий код в файл functions.php вашей дочерней темы или в специальный плагин для пользовательских функций:
add_action('woocommerce_product_set_stock', 'auto_disable_out_of_stock_products', 10, 1);
function auto_disable_out_of_stock_products($product) {
if (!$product instanceof WC_Product) {
return;
}
$stock_quantity = $product->get_stock_quantity();
$status = $product->get_status();
if ($stock_quantity !== null && $stock_quantity <= 0 && $status !== 'draft') {
// Отключаем товар
$product->set_status('draft');
$product->save();
} elseif ($stock_quantity > 0 && $status === 'draft') {
// Восстанавливаем товар
$product->set_status('publish');
$product->save();
}
}Этот код автоматически переводит товар в статус "Черновик" при отсутствии запасов и возвращает в "Опубликован" при появлении товара в наличии.
Настройка WooCommerce для работы с запасами
- В админке WooCommerce перейдите в WooCommerce > Настройки > Товары > Запасы.
- Включите управление запасами.
- Убедитесь, что опция "Скрывать товары без наличия" отключена, чтобы код мог контролировать статус.
Проверка результата после внедрения
Для проверки корректной работы решения проделайте следующие шаги:
- В админке измените количество товара на 0 и сохраните.
- Перейдите на страницу списка товаров — товар должен исчезнуть, так как он переведён в статус "Черновик".
- Увеличьте количество товара до положительного значения и сохраните.
- Проверьте, что товар снова отображается на витрине и доступен для покупки.
Частые ошибки и как их исправить
- Товар не скрывается при 0 запасов: Проверьте, что в WooCommerce включено управление запасами и код действительно выполняется (проверьте логи или добавьте временный
error_log()). - Изменение статуса не сохраняется: Убедитесь, что объект
$productявляется экземпляромWC_Product, а также что нет конфликтов с другими плагинами, блокирующими сохранение. - Восстановление товара не происходит: Проверьте, что статус товара действительно устанавливается в "draft", иначе условие восстановления не сработает.
- Проблемы с кэшированием: При использовании кэш-плагинов очистите кэш после изменений для корректного отображения.
Практические советы по безопасности и производительности
- Выполняйте код только при изменении запасов, чтобы избежать лишних запросов к базе данных.
- Храните код в дочерней теме или в отдельном плагине для удобства поддержки.
- Регулярно делайте резервные копии перед внесением изменений.
- Используйте Clearfy Pro для оптимизации и очистки базы данных WooCommerce, что улучшит производительность при большом каталоге.
Сравнение вариантов отключения товаров при отсутствии наличия
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Использование стандартных настроек WooCommerce | Отключение отображения товаров без запасов через настройки | Простота настройки, не требует кода | Не всегда скрывает товар полностью, нет автоматики изменения статуса |
| Код с автоматическим изменением статуса (предложенный) | Автоматическое переключение статуса товара при изменении запасов | Полный контроль над отображением, гибкость | Требует базовых знаний PHP и тестирования |
| Плагины сторонних разработчиков | Готовые решения для управления товарами и запасами | Дополнительный функционал, поддержка | Может влиять на производительность, возможны конфликты |