WooCommerce: как автоматически исключать товары из каталога при отсутствии на складе

Диагностика проблемы: почему товары без наличия остаются в каталоге

По умолчанию WooCommerce продолжает отображать товары даже при нулевом или отрицательном запасе, если не настроено явное скрытие. Это приводит к неудобствам для пользователей и снижает конверсию. Нужно быстро и надежно исключать из видимости товары с отсутствующим на складе запасом.

Пошаговое решение: автоматическое исключение товаров с нулевым запасом из каталога WooCommerce

1. Включение управления запасами

Убедитесь, что в WooCommerce включено управление запасами. Это необходимо для отслеживания остатков товаров.

WooCommerce > Настройки > Товары > Запасы > Управлять запасами: Включено

2. Добавление фильтра для исключения товаров без остатков из каталога

Добавьте следующий код в файл 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' => 'instock',
            'compare' => '=',
        ];
        $query->set('meta_query', $meta_query);
    }
}

Этот код добавляет фильтрацию товаров по мета-полю _stock_status, оставляя только товары со статусом instock.

3. Настройка отображения отсутствующих товаров на страницах поиска и виджетах

Для исключения товаров с нулевым остатком из любых списков и виджетов дополнительно проверьте, что в них используется основной запрос WordPress. Если используются нестандартные WP_Query, примените аналогичные фильтры.

Проверка результата после внедрения

  • Добавьте в каталог тестовый товар с нулевым запасом.
  • Обновите страницу магазина и категорий — товар должен исчезнуть из списка.
  • Проверьте поиск по сайту — отсутствующий товар не должен появляться.
  • В административной панели в списке товаров товар с нулевым запасом должен отображаться, но на фронте — нет.

Частые ошибки и как их исправить

  • Код не работает, товары с нулевым запасом видны — возможно, кэширование страницы. Очистите кэш плагинов и браузера.
  • Фильтр влияет на административную панель — убедитесь, что условие !is_admin() стоит и работает корректно.
  • Пользовательский WP_Query не учитывает фильтр — добавьте фильтр вручную в параметры запроса.
  • Проблемы с совместимостью с плагинами кеширования — исключите страницы каталога из кеша или настройте кеширование с учетом динамических условий.

Практические советы по производительности и безопасности

  • Используйте meta_query аккуратно: большое количество условий снижает скорость запросов к базе.
  • Для крупных магазинов рассмотрите использование плагинов кеширования с поддержкой WooCommerce, например, WP Rocket с отключением кеша для корзины и страниц аккаунта.
  • Обновляйте WooCommerce и темы, чтобы избежать проблем с API и мета-данными.
  • Для более сложных сценариев фильтрации товаров по запасу используйте кастомные индексы в базе данных.

Сравнение способов реализации исключения товаров по наличию

МетодПлюсыМинусыКогда использовать
Добавление фильтра в pre_get_postsПростой и легкий в реализации, не требует плагиновМожет не работать с кастомными запросами, требует проверки кэшированияНебольшие и средние магазины без сложных запросов
Использование плагинов для управления запасомГотовые решения с настройками и поддержкойДополнительная нагрузка на сайт, возможные конфликтыДля крупных магазинов с расширенными требованиями
Кастомные запросы через WP_Query с параметрамиГибкий контроль, можно фильтровать вездеТребует разработки и поддержкиПроекты с нестандартным отображением товаров
Как добавить собственные поля в WordPress без плагинов
11.11.2025
Как избежать проблем с кэшированием в WordPress: практические решения
01.01.2026
Как удалить заблокированные пользователи из WordPress
09.12.2025
WooCommerce: как автоматически удалять товар из каталога при отсутствии на складе
17.05.2026
Автоматическое удаление корзины в WooCommerce после оплаты
01.05.2026