WooCommerce: автоматическое отключение товаров при отсутствии на складе с возможностью возврата

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

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

Что проверять перед внедрением решения

  • Включена ли опция управления запасами в WooCommerce (WooCommerce > Настройки > Товары > Управление запасами).
  • Правильно ли настроены статусы наличия товара и отображение в каталоге.
  • Используются ли сторонние плагины, которые могут конфликтовать с изменением статуса товара.

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

Реализуем автоматическую смену статуса товара на «Черновик» при достижении запасов нуля, с возможностью возврата в публикацию при пополнении запасов.

1. Добавляем хук на сохранение товара

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

add_action('save_post_product', 'auto_disable_out_of_stock_product', 10, 3);function auto_disable_out_of_stock_product($post_id, $post, $update) {    // Проверяем, что это продукт и обновление    if ($post->post_type !== 'product' || !$update) {        return;    }    // Проверяем управление запасами и наличие    $product = wc_get_product($post_id);    if (!$product || !$product->managing_stock()) {        return;    }    $stock_quantity = $product->get_stock_quantity();    $status = $post->post_status;    if ($stock_quantity <= 0 && $status !== 'draft') {        // Переводим в черновик при отсутствии товара        $post_update = array(            'ID' => $post_id,            'post_status' => 'draft',        );        wp_update_post($post_update);    } elseif ($stock_quantity > 0 && $status === 'draft') {        // Возвращаем в публикацию при появлении товара        $post_update = array(            'ID' => $post_id,            'post_status' => 'publish',        );        wp_update_post($post_update);    }}

2. Очистка кэша и индексации

Если используете кэширование или сторонние поисковые плагины, убедитесь, что при смене статуса товара кэш обновляется. Для этого можно добавить вызов очистки кэша в функции выше (например, wp_cache_delete($post_id) или специфичные методы плагинов кэширования).

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

  • Создайте тестовый товар с управлением запасами.
  • Установите запас в 1 и опубликуйте товар.
  • Измените запас на 0 и сохраните товар.
  • Проверьте, что товар стал черновиком и не отображается в каталоге.
  • Верните запас больше 0 и сохраните, проверьте, что товар снова опубликован.

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

  • Товар не меняет статус: проверьте, что в WooCommerce включено управление запасами для товара.
  • Конфликт с другими плагинами: отключите сторонние плагины, которые могут влиять на сохранение товара, и протестируйте.
  • Кэш не обновляется: добавьте очистку кэша после изменения статуса товара.
  • Автоматическое обновление не срабатывает при массовом обновлении: в таком случае используйте WP CLI или крон-задачи для периодической проверки запасов.

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

  • Не используйте тяжелые запросы в хуках сохранения поста, чтобы не замедлять админ-панель.
  • Добавьте проверку nonce и прав пользователя, если планируете расширять функционал для массового обновления.
  • При большом каталоге товаров лучше организовать отдельную WP Cron задачу, которая раз в час проверяет наличие и обновляет статусы.
  • Включите логирование изменений статуса, чтобы отслеживать автоматические изменения и выявлять ошибки.

Сравнение вариантов реализации

МетодПреимуществаНедостаткиКомпромисс
Хук на сохранение товараМоментальное обновление, простой кодНе работает при массовом импорте, нагрузка при частых сохраненияхИспользовать вместе с WP Cron для массовых обновлений
WP Cron периодическая проверкаПодходит для большого каталога, меньше нагрузки на админкуОбновления не моментальные, задержка до выполнения cronОптимизировать период запуска (например, раз в час)
Сторонние плагины для автоматизацииГотовые решения, часто с дополнительным функционаломМогут конфликтовать, требуют обновленийИспользовать проверенные плагины и тестировать на staging
Как использовать хуки WordPress для автоматизации задач
21.12.2025
Как изменить и добавить дополнительные поля в форму регистрации WordPress
07.04.2026
Как создать проверку валидации формы на AJAX в WordPress с примерами кода
23.02.2026
Как использовать WPCommunity для создания форума на WordPress
27.02.2026
WooCommerce: автоматическое отключение товаров при отсутствии на складе с возможностью возврата
13.06.2026