wpcontrol.ru wordpress WPControl.ru

WooCommerce: автоматическое отключение товаров и вариаций при отсутствии на складе

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

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

Проверить проблему можно так:

  • Перейдите в админку WooCommerce > Товары и откройте карточку товара.
  • Посмотрите параметры управления запасами и статус наличия.
  • Если товар имеет статус "В наличии", но фактически его нет, значит, автоматизация отключения не настроена.
  • Для вариаций проверьте каждый вариант: отсутствующие должны иметь статус "Нет в наличии".

Как автоматически отключать товары без наличия

WooCommerce по умолчанию позволяет управлять запасами и автоматически менять статус товара на "Нет в наличии". Но для полного отключения (чтобы товар не отображался в каталоге) нужна дополнительная логика.

Реализуем это с помощью фильтра woocommerce_product_is_visible, который отвечает за отображение товара в каталоге и поиске.

add_filter('woocommerce_product_is_visible', 'hide_out_of_stock_products', 10, 2);
function hide_out_of_stock_products($visible, $product_id) {
    $product = wc_get_product($product_id);
    if (!$product->is_in_stock()) {
        return false; // скрыть товар из каталога
    }
    return $visible;
}

Этот код нужно добавить в файл functions.php вашей темы или в кастомный плагин.

Автоматическое отключение вариаций товаров

Для вариаций логика похожа, но нужно учитывать, что вариации — отдельные объекты типа WC_Product_Variation. Если вариация отсутствует, она должна быть скрыта из выбора на странице товара.

add_filter('woocommerce_variation_is_active', 'hide_out_of_stock_variations', 10, 2);
function hide_out_of_stock_variations($is_active, $variation) {
    if (!$variation->is_in_stock()) {
        return false; // скрываем вариацию
    }
    return $is_active;
}

Пошаговое руководство по внедрению

  1. Сделайте бэкап сайта и базы данных.
  2. Откройте файл functions.php вашей дочерней темы или создайте кастомный плагин.
  3. Вставьте оба кода из раздела выше для отключения товаров и вариаций.
  4. Сохраните изменения и очистите кеш сайта и браузера.
  5. Проверьте наличие товаров и вариаций, изменив их статус наличия на "Нет в наличии".

Как проверить, что решение работает

  • Перейдите на страницу магазина — товары без наличия должны исчезать из списка.
  • Откройте страницу товара с вариациями — отсутствующие вариации не должны отображаться в селекторе вариаций.
  • Попробуйте напрямую перейти по ссылке на отключённый товар — он должен возвращать 404 или отсутствовать.

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

  • Товары видны, хотя на складе нет: Проверьте, что у товара включён учёт запасов (в настройках товара «Управлять запасами» должно быть активно).
  • Вариации не скрываются: Убедитесь, что код добавлен именно в functions.php активной темы или в плагине, и что кэш очищен.
  • Проблемы с кэшированием: Если используется кеширование страниц, добавьте исключения для страниц магазина и товаров или отключите кэш во время тестирования.
  • Ошибка PHP после добавления кода: Проверьте синтаксис и корректность копирования, используйте отладчик или лог ошибок сервера.

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

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

Сравнение способов реализации

МетодОписаниеПлюсыМинусы
Код в functions.phpФильтры WooCommerce для скрытия товаров и вариацийЛегковесно, полное управление, без доп. плагиновТребует навыков PHP, возможны ошибки при правках
Плагины (например, Hide Out of Stock)Готовые решения для скрытия отсутствующих товаровПростота установки, UI для настройкиДополнительная нагрузка, возможны конфликты, платные функции
×
Сделай свой сайт крутым!

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

Выбрать плагин сейчас ⋙