Как в WooCommerce исключить из каталога товары без остатка на складе

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

В стандартной настройке WooCommerce товары с нулевым или отрицательным остатком по умолчанию отображаются в каталоге и могут вводить покупателей в заблуждение, так как они не доступны к покупке. Для интернет-магазинов с большим ассортиментом и ограниченным запасом это снижает удобство и конверсию. Поэтому актуальна задача — автоматически скрывать из каталога товары, у которых нет доступного запаса на складе.

Как проверить текущие настройки WooCommerce по отображению товаров без остатка

Перейдите в WooCommerce > Настройки > Товары > Запасы и обратите внимание на опцию Скрывать отсутствующие товары из каталога. Если она не активирована, товары без запаса будут отображаться.

Однако иногда этого недостаточно, если у вас сложные сценарии учета запасов (например, индивидуальные запасы для вариаций или кастомные мета-поля). Тогда понадобится доработка функционала.

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

1. Добавление фильтра в 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, то есть без запаса.

2. Проверка работы фильтра

  • Очистите кэш сайта и браузера.
  • Перейдите на страницу магазина и категории товаров.
  • Убедитесь, что товары с нулевым запасом не отображаются.
  • Проверьте, что товары с запасом отображаются корректно.

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

Для включения фильтра и в поисковой выдаче добавьте в код условие is_search():

if (!is_admin() && $query->is_main_query() && (is_shop() || is_product_category() || is_product_tag() || is_search())) {
    // фильтр как выше
}

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

  • Фильтр не работает на страницах магазина
    Проверьте, что условие $query->is_main_query() не конфликтует с плагинами кэширования или оптимизации. Попробуйте временно отключить кэш и проверить снова.
  • Некорректно скрываются вариации товаров
    Для вариативных товаров статус запаса хранится в родительском товаре. Убедитесь, что индексы и мета-поля правильно настроены. При необходимости доработайте запрос для учета вариаций.
  • Товары остаются в выдаче, хотя запас есть
    Проверьте, что у товара корректно обновлен мета-поле _stock_status. Можно вручную проверить через phpMyAdmin или WP CLI.

Практические советы по оптимизации и безопасности

  • Добавляйте код в дочернюю тему или кастомный плагин, чтобы избежать потери изменений при обновлении.
  • Перед внесением изменений сделайте резервную копию сайта и базы данных.
  • Если у магазина большой каталог, учитывайте нагрузку на запросы с meta_query. При необходимости используйте индексацию базы данных.
  • Тестируйте изменения на тестовом стенде, а не на живом сайте.

Сравнение способов скрытия товаров без запаса

МетодОписаниеПлюсыМинусы
Настройка WooCommerceВключить опцию "Скрывать отсутствующие товары" в настройках WooCommerceПростой способ без кодаНе всегда учитывает сложные сценарии с вариациями
Код на hooks (приведённый выше)Исключение товаров через фильтр pre_get_postsГибко, можно тонко настроить выборкуНужны навыки программирования, возможность конфликтов с другими плагинами
Плагины для управления запасамиСпециализированные решения типа "WooCommerce Hide Out of Stock Products"Дополнительные функции, удобствоМожет влиять на производительность, требует обновлений

Дополнительный пример: автоматическое обновление статуса запаса через WP CLI

Для больших магазинов полезно периодически синхронизировать статус запасов. Пример команды для WP CLI:

wp wc product update 123 --stock_status=instock

Где 123 - ID товара, а --stock_status принимает значения instock, outofstock и т.д.

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

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: как автоматически исключить из каталога товары по основному атрибуту
21.05.2026
Как создать автоматическую оптимизацию изображений в WordPress без плагинов
23.12.2025
Как массово удалить или изменить атрибуты ALT изображений в WordPress
23.03.2026
WooCommerce: как автоматически исключить из каталога товары без остатка на складе
28.04.2026
Как сделать автоматическую транслитерацию URL в WordPress
04.11.2025
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее