WooCommerce: автоматическое отключение товаров при отсутствии наличия в Elementor

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

При работе с WooCommerce и Elementor часто возникает задача автоматически скрывать или отключать товары, если их количество на складе равно нулю, чтобы покупатели не могли добавить такие товары в корзину. Часто пользователи замечают, что товары остаются видимыми и доступными для покупки, даже если они закончились, что приводит к негативному опыту и увеличивает количество возвратов.

Для диагностики такой проблемы проверьте следующие моменты:

  • Включено ли в WooCommerce управление запасами (Настройки > Товары > Запасы > Включить управление запасами)
  • Правильно ли указано количество товаров (количество не меньше или равно нулю)
  • Настройки отображения товаров без наличия (Настройки > Товары > Отображение > Скрывать отсутствующие товары)
  • Не переопределяется ли отображение товаров через Elementor или кастомный код, который игнорирует стандартные фильтры WooCommerce

Пошаговое решение для автоматического отключения товаров в Elementor

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

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

2. Настроить скрытие отсутствующих товаров

В разделе WooCommerce > Настройки > Товары > Отображение активируйте опцию Скрывать отсутствующие товары из каталога. Это базовое решение без кода, но оно не всегда работает с кастомными шаблонами Elementor.

3. Добавить кастомный фильтр для Elementor и WooCommerce

Если товары все еще отображаются, добавьте следующий код в файл functions.php вашей дочерней темы или в плагин для кастомных функций:

add_action('pre_get_posts', function($query) {
    if (!is_admin() && $query->is_main_query() && (is_shop() || is_product_taxonomy() || is_product_category())) {
        $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);
    }
});

Этот код заставляет запрос WooCommerce выводить только товары со статусом instock (в наличии). Он учитывает страницы магазина и таксономии товаров, что важно для корректной работы с Elementor, если вы строите шаблоны архивов продуктов.

4. Отключить возможность добавлять в корзину отсутствующие товары

Чтобы дополнительно исключить возможность покупки отсутствующих товаров, добавьте:

add_filter('woocommerce_is_purchasable', function($purchasable, $product) {
    if (!$product->is_in_stock()) {
        return false;
    }
    return $purchasable;
}, 10, 2);

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

  • Откройте страницу магазина или категорий товаров, созданных с помощью Elementor.
  • Убедитесь, что товары с нулевым запасом не отображаются.
  • Попробуйте перейти на страницу отсутствующего товара напрямую — кнопка «Добавить в корзину» должна отсутствовать или быть неактивной.
  • Проверьте в админке WooCommerce, что статус товаров корректный (В наличии или Нет в наличии).

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

  • Код не работает на кастомных шаблонах Elementor — проверьте, что шаблон архива или магазина использует стандартный WP_Query, а не кастомные запросы без поддержки meta_query. Возможно, потребуется доработать шаблон.
  • Товары отображаются, но нельзя купить — это связано с фильтром woocommerce_is_purchasable. Проверьте, что он корректно подключен и нет конфликтующих плагинов.
  • Товары не скрываются на страницах, созданных через Elementor Pro Posts или Products widgets — проверьте настройки виджета, там может быть опция по отображению всех товаров без учета наличия.
  • Кэширование мешает видеть изменения — очистите кеш плагинов и браузера.

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

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

Сравнение вариантов решения задачи

МетодПреимуществаНедостаткиКогда использовать
Настройка WooCommerce (скрыть отсутствующие)Простое подключение без кодаНе всегда работает с Elementor кастомными шаблонамиМаленькие магазины без кастомных шаблонов
Код на pre_get_postsГибко и надежно скрывает товары на всех страницахТребует базовых навыков PHP и контроля шаблоновМагазины с кастомными шаблонами Elementor
Плагины для управления видимостью товаровДополнительные функции и настройкиМожет замедлить сайт, требует лицензииЕсли нужна сложная логика отображения
WooCommerce: как разрешить покупателям самостоятельно изменять количество товара в корзине
15.05.2026
Как использовать Elementor для создания условных блоков в WordPress
08.12.2025
Как создать динамические отзывы с подсчетом рейтинга в Elementor для WordPress
03.04.2026
WooCommerce: как изменить схему назначений корзины для кастомных страниц в Elementor
29.04.2026
Как использовать хук WooCommerce add_to_cart для удаления товаров после покупки
07.07.2026