Диагностика проблемы с отсутствием наличия товаров
При работе с 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 |
| Плагины для управления видимостью товаров | Дополнительные функции и настройки | Может замедлить сайт, требует лицензии | Если нужна сложная логика отображения |