Диагностика проблемы: почему товары без остатка остаются в каталоге
В стандартной установке WooCommerce товары с нулевым или отрицательным запасом продолжают отображаться в каталоге, если специально не настроить их скрытие. Это приводит к неудобствам для пользователей, которые видят недоступные к покупке товары, а также снижает качество сайта и может негативно повлиять на SEO.
Чтобы определить, отображается ли на вашем сайте такая проблема, проверьте список товаров в каталоге и обратите внимание на те, у которых количество на складе равно нулю или меньше. Если они доступны для просмотра (даже без возможности покупки), значит, нужно настроить их автоматическое исключение.
Как автоматизировать исключение товаров без остатка из каталога
Настройка WooCommerce для скрытия товаров без запаса
В WooCommerce есть встроенная опция, позволяющая скрывать товары без остатков. Чтобы ее активировать:
- Перейдите в WooCommerce > Настройки > Товары > Запасы.
- Найдите опцию
Скрывать товары без запаса из каталогаи поставьте галочку. - Сохраните изменения.
Этот способ самый простой, но он не всегда подходит, если нужна более точечная логика или исключение по категории.
Автоматическое исключение с помощью кода
Если нужна кастомизация, можно добавить фильтр в functions.php вашей темы или в плагин-сниппет. Пример кода для исключения товаров без запаса из каталога:
add_action('pre_get_posts', 'exclude_out_of_stock_products_from_catalog');
function exclude_out_of_stock_products_from_catalog($query) {
if (!is_admin() && $query->is_main_query() && (is_shop() || is_product_category() || is_product_tag())) {
$meta_query = $query->get('meta_query');
if (!is_array($meta_query)) {
$meta_query = [];
}
$meta_query[] = [
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => '!='
];
$query->set('meta_query', $meta_query);
}
}Этот код исключит из каталога все товары, у которых статус запаса outofstock.
Пошаговая инструкция по внедрению решения
- Перейдите в админку WordPress > Внешний вид > Редактор темы.
- Откройте файл
functions.phpактивной темы. - Скопируйте и вставьте указанный выше код в конец файла.
- Сохраните изменения.
- Перейдите на страницу магазина и обновите ее.
Проверка результата после внедрения
Чтобы убедиться, что товары без остатка не отображаются:
- Зайдите в каталог WooCommerce.
- Найдите товары, у которых в админке запас равен нулю или меньше.
- Проверьте, что такие товары не показываются в списке.
- Если товар все еще отображается, очистите кеш сайта и браузера.
Частые ошибки и как их исправить
- Ошибка: Код не работает, товары без запаса продолжают отображаться.
Причина: Возможно, условия вpre_get_postsне срабатывают из-за кастомного запроса или конфликтов с плагинами.
Решение: Убедитесь, что условиеis_shop() || is_product_category() || is_product_tag()подходит именно для вашего шаблона каталога, или расширьте проверку. - Ошибка: Код вызывает сбои или белый экран.
Причина: Синтаксическая ошибка в коде.
Решение: Проверьте синтаксис, используйте отладчик или включите WP_DEBUG для поиска ошибок. - Ошибка: Товары с запасом тоже не отображаются.
Причина: Неправильная логика в фильтре meta_query.
Решение: Проверьте, что сравнение'compare' => '!='стоит именно для значения'outofstock'.
Практические советы по безопасности и производительности
- Всегда делайте бэкап сайта перед изменением
functions.php. - Код для исключения товаров выполняется на каждом запросе каталога, поэтому держите фильтр максимально легким.
- Используйте объектный кэш и кеширование страниц, чтобы снизить нагрузку при фильтрации товаров.
- Если у вас большой каталог, рассмотрите использование специализированных плагинов для управления запасами и отображением товаров.
Сравнение вариантов: использование плагина vs кастомный код
| Вариант | Преимущества | Недостатки | Когда использовать |
|---|---|---|---|
| Встроенная настройка WooCommerce | Простота, не требует кода | Мало гибкости, не всегда подходит | Для базового скрытия товаров без запаса |
Кастомный код в functions.php | Гибкость, можно настроить под любые условия | Требует навыков, риск ошибок | Нужна точечная логика исключения |
| Плагины управления запасами | Расширенные функции, удобный интерфейс | Может замедлять сайт, требует поддержки | Большие магазины с комплексными требованиями |