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

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

В стандартной установке WooCommerce товары с нулевым остатком продолжают отображаться в каталоге, если не включена опция скрытия таких товаров. Это приводит к снижению удобства для пользователей, которые видят недоступные товары и могут попытаться их заказать. В панели 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()) {
        return;
    }

    if ((is_shop() || is_product_category() || is_product_tag() || is_search()) && !current_user_can('manage_woocommerce')) {
        $meta_query = $query->get('meta_query') ?: array();
        $meta_query[] = array(
            'key' => '_stock_status',
            'value' => 'outofstock',
            'compare' => '!='
        );
        $query->set('meta_query', $meta_query);
    }
}

Объяснение:

  • Функция срабатывает только для главного пользовательского запроса на страницах магазина, категорий, тегов и поиска.
  • Исключаем товары с мета-ключом _stock_status равным outofstock.
  • Администраторам товары без остатка по-прежнему видны для управления.

Шаг 2. Очистите кэш сайта и браузера

Если используете плагин кэширования (например, WP Rocket, W3 Total Cache), очистите весь кэш, чтобы изменения отобразились корректно.

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

  • Зайдите на страницу магазина или категорий и убедитесь, что товары с нулевым остатком отсутствуют.
  • Попробуйте перейти на страницу товара с нулевым остатком напрямую — он должен отображаться (для SEO и ссылок) или можно дополнительно скрыть и страницу товара, если нужно.
  • Авторизуйтесь как администратор и проверьте, что товары без остатков отображаются в панели управления.

Частые ошибки при реализации и их исправление

  • Код не работает, товары без остатков все еще в каталоге. Проверьте, что фильтр добавлен правильно и не конфликтует с другими плагинами. Попробуйте временно отключить сторонние плагины, которые могут менять запросы WooCommerce.
  • В каталоге пропали все товары. Возможно, в запрос добавлен неправильный мета-запрос. Убедитесь, что meta_query формируется корректно и не перезаписывает существующие условия.
  • Фильтр срабатывает в админке. Обязательно проверяйте is_admin() чтобы не влиять на административные запросы.

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

  • Добавляйте фильтры запросов только для главного запроса, чтобы избежать лишней нагрузки.
  • Избегайте повторного добавления мета-запросов — если ваша тема или плагины уже фильтруют по наличию, может быть конфликт.
  • Регулярно обновляйте WooCommerce и темы — иногда встроенные функции скрытия товаров без остатков улучшаются.
  • Если у вас большой каталог, рассмотрите индексацию мета-полей для ускорения запросов.

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

Метод Плюсы Минусы Пример кода или плагин
Включение опции WooCommerce Простота, нет кода Не всегда работает с кастомными темами WooCommerce → Настройки → Запасы
Кодовый фильтр pre_get_posts Гибкость, работает с любой темой Требует базовых знаний PHP, возможны конфликты Пример из статьи выше
Плагины (например, "WooCommerce Hide Out of Stock") Удобство, дополнительные функции Дополнительная нагрузка, платные функции Плагин WooCommerce Hide Out of Stock

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

⭐⭐⭐⭐⭐
Как избежать проблем с оформлением перевода в WordPress: практические советы и примеры
10.12.2025
Как использовать хук post save в WordPress для дополнительной обработки данных
19.12.2025
Как избежать проблем с кэшированием в WordPress: практические советы
02.03.2026
Как сделать автоматическую транслитерацию URL в WordPress
04.11.2025
Как устроить автоматический перевод контента в WordPress: практическое руководство
06.03.2026
×
Прокачай свой WordPress!

Скидка -20% на премиум темы и плагины

Воспользоваться сейчас ⋙