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

Сценарий типичный: товар закончился, но он всё ещё виден в каталоге, попадает в поиск, открывается по прямой ссылке и мешает покупателю. Иногда это нормально, если нужен предзаказ. Но если магазин работает только с фактическим остатком, такие карточки лучше скрывать полностью или хотя бы убирать из списков.

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

Когда проблема действительно в остатках, а не в теме или кэше

Перед правкой кода стоит понять, где именно товар продолжает отображаться. В WooCommerce есть несколько разных мест, и они ведут себя по-разному:

  • каталог магазина и архивы категорий;
  • виджеты и блоки с товарами;
  • поиск по сайту;
  • страница товара по прямой ссылке;
  • связанные товары и рекомендации.

Если товар «нет в наличии», но виден только на странице товара, это одна история. Если он продолжает показываться в категории и в поиске — нужна другая настройка. Часто проблема вообще не в WooCommerce, а в кэше страницы или в теме, которая выводит товары своим запросом и игнорирует стандартные фильтры.

Быстрая диагностика

  1. Откройте товар с остатком 0 или со статусом outofstock.
  2. Проверьте, включён ли учёт склада в WooCommerce → Настройки → Товары → Запасы.
  3. Очистите кэш плагина, сервера и CDN, если он есть.
  4. Посмотрите, не выводит ли тема товары через собственный шаблон или кастомный запрос.

Если после очистки кэша товар всё равно виден в каталоге, переходите к решению ниже.

Как скрыть товары без остатка через настройки WooCommerce

Самый безопасный путь — использовать встроенную настройку WooCommerce. Она не требует кода и подходит, если вам нужно скрывать товары из каталога, но при этом оставить страницу товара доступной по прямой ссылке.

Проверьте параметр «Скрыть товары, которых нет в наличии, из каталога» в настройках запасов. В зависимости от версии WooCommerce он может быть в разделе управления запасами или на странице настроек товаров. После включения WooCommerce перестаёт показывать такие товары в архивах и поиске каталога.

Но есть нюанс: если тема или сторонний плагин строит список товаров вручную, эта настройка может не сработать. Тогда нужен код.

Решение через код: скрыть товары без остатка из всех стандартных списков

Если нужно контролировать поведение точнее, используйте фильтр woocommerce_product_query_meta_query. Он позволяет добавить условие к основному запросу товаров и убрать из выдачи позиции со статусом outofstock.

Добавлять код лучше в дочернюю тему или в небольшой mu-plugin, а не в functions.php активной темы, если тема часто обновляется.

<?php
add_filter( 'woocommerce_product_query_meta_query', 'wpdirect_hide_outofstock_products' );

function wpdirect_hide_outofstock_products( $meta_query ) {
    if ( is_admin() ) {
        return $meta_query;
    }

    $meta_query[] = array(
        'key'     => '_stock_status',
        'value'   => 'outofstock',
        'compare' => '!='
    );

    return $meta_query;
}

Этот вариант влияет на стандартные запросы WooCommerce в каталоге. Если у вас включён показ товаров без остатка на странице товара, но в каталоге они должны исчезать, это как раз подходящий сценарий.

Если нужно скрыть только из каталога, но оставить прямую ссылку

В таком случае не трогайте сам товар и не меняйте его статус публикации. Достаточно фильтровать запросы каталога. Это важно для SEO и для старых внешних ссылок: страница товара останется доступной, а из листинга исчезнет.

Если же товар нужно убрать полностью, это уже не задача WooCommerce, а вопрос статуса публикации, редиректа или архивации карточки.

Сравнение подходов: настройка, код или плагин

ПодходЧто делаетПлюсыМинусы
Настройка WooCommerceСкрывает outofstock из каталогаБыстро, без кодаНе всегда работает с кастомными запросами
Код через фильтрЖёстко исключает товары из стандартной выдачиКонтроль, предсказуемостьНужно аккуратно внедрять и тестировать
Плагин для управления каталогомДобавляет дополнительные правила отображенияУдобно для контент-менеджеровЛишняя зависимость и риск конфликтов

Если у вас уже стоит набор оптимизационных инструментов, например Clearfy Pro, сначала проверьте, не включено ли там скрытие дублей или лишних архивов, которые влияют на выдачу каталога. Но саму логику скрытия outofstock лучше держать в WooCommerce или в коде, а не размазывать по нескольким плагинам.

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

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

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

Если товар всё ещё виден в категории, но код уже добавлен, значит запрос строится не стандартным способом. Тогда смотрите шаблон темы, блоки WooCommerce или сторонний фильтр товаров.

Что должно быть видно в админке

В карточке товара статус остатка должен оставаться честным: Нет в наличии или Out of stock. Скрытие из каталога не должно менять сам остаток, иначе вы потеряете контроль над складом и отчётностью.

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

  • Товар не исчезает после настройки. Причина часто в кэше или в кастомном запросе темы. Сначала очистите кэш, потом проверьте шаблон архива товаров.
  • Скрылись не только товары без остатка, но и часть вариативных товаров. Обычно это происходит, если тема неправильно обрабатывает вариации. Проверьте, не скрывает ли она родительский товар целиком.
  • Товар пропал из каталога, но нужен для предзаказа. В этом случае не скрывайте outofstock, а включите предзаказ или отдельный статус отображения.
  • Изменения работают только для магазина, но не для блока «Рекомендуемые товары». Значит, блок использует отдельный запрос. Его нужно настраивать отдельно.
  • После обновления темы всё сломалось. Если правки были в файлах темы, перенесите их в дочернюю тему или mu-plugin.

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

Если каталог большой, не добавляйте тяжёлые условия в каждый запрос без необходимости. Для скрытия outofstock достаточно одного фильтра на основной запрос WooCommerce. Не стоит дублировать логику в нескольких местах: это усложняет отладку и может замедлить архивы.

Перед изменениями сделайте резервную копию файлов и базы. Если правите код вручную, держите отдельный фрагмент в небольшом плагине или mu-plugin — так проще откатить изменение и не зависеть от обновления темы.

Если у вас магазин на WooCommerce с большим количеством товаров и контентом, полезно дополнительно проверить, как ведёт себя поиск и фильтры после скрытия outofstock. Иногда товар исчезает из каталога, но остаётся в результатах поиска по индексации плагина поиска. Это уже отдельная настройка, и её лучше проверять отдельно от основного каталога.

Когда лучше не скрывать товары полностью

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

Для магазинов с предзаказами, сезонными товарами или частыми поставками это часто лучший компромисс: каталог остаётся чистым, а SEO и старые ссылки не теряются.

Использование WPCommunity для создания социальной сети на WordPress с уникальными функциями
12.04.2026
Решение проблемы с отключением WooCommerce после обновления или миграции
18.04.2026
Как использовать хуки в WordPress для расширения функционала
15.11.2025
WooCommerce: автоматическое удаление отменённых заказов по расписанию
09.06.2026
Как добавить автоматическое удаление старых черновиков в WordPress
01.04.2026