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

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

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

Шаги для реализации автоматического отключения товаров без остатков

1. Использование хука для проверки наличия товара

В WooCommerce статус товара можно менять программно через хуки WordPress. Для автоматического отключения будем использовать cron-задачу, которая будет запускаться ежедневно и проверять остатки товаров.

function wpbuy_disable_out_of_stock_products() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '=',
            ],
        ],
        'fields'         => 'ids',
    ];

    $out_of_stock_products = get_posts($args);

    foreach ($out_of_stock_products as $product_id) {
        $product = wc_get_product($product_id);
        if ($product->get_status() !== 'draft') {
            $product->set_status('draft');
            $product->save();
        }
    }
}

2. Регистрация WP-Cron задачи для регулярного запуска

Добавим регистрацию задачи, чтобы функция запускалась каждый день в полночь.

function wpbuy_register_cron_event() {
    if (!wp_next_scheduled('wpbuy_daily_disable_products')) {
        wp_schedule_event(strtotime('00:00:00'), 'daily', 'wpbuy_daily_disable_products');
    }
}
add_action('wp', 'wpbuy_register_cron_event');

add_action('wpbuy_daily_disable_products', 'wpbuy_disable_out_of_stock_products');

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

  • После выполнения cron-задачи товары с отсутствием на складе должны иметь статус draft и не отображаться в каталоге.
  • Для теста можно временно сменить статус товара на in stock, запустить функцию вручную и проверить, что товар скрывается.
  • Запустите функцию вручную через WP-CLI: wp eval 'wpbuy_disable_out_of_stock_products();' или вызовите через временный admin-скрипт.
  • Проверьте в админке WooCommerce, что статус товаров изменился.

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

  • Функция не запускается автоматически: Проверьте, работает ли WP-Cron на вашем сервере. Для этого используйте плагин WP Crontrol или проверьте логи сервера.
  • Товары не меняют статус: Убедитесь, что у пользователя от имени которого запускается скрипт есть права на изменение продуктов. Проверьте, что используете функции WooCommerce правильно.
  • Проблемы с производительностью при большом количестве товаров: Для магазинов с тысячами товаров рекомендуется разбить выборку на страницы, используя параметр paged в get_posts.
  • Товары не исчезают из каталога после смены статуса: Проверьте настройки отображения товаров с статусом draft в теме и плагинах кэширования.

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

  • Запускайте тяжелые задачи по изменению статусов товаров в off-peak время, чтобы не нагружать сервер.
  • Используйте транзиенты для кеширования результатов выборки в случае частого вызова.
  • Если на сайте включено кэширование (например, через WP Rocket, LiteSpeed Cache), убедитесь, что кэш очищается после обновления статусов товаров.
  • Для больших магазинов рассмотрите использование WP-CLI для запуска скриптов вне веб-запросов.
  • Отслеживайте логи ошибок PHP и WP-Cron для своевременного обнаружения сбоев.

Сравнение вариантов реализации автоматического отключения товаров

МетодПреимуществаНедостатки
WP-Cron + кастомный кодГибкость, не требует сторонних плагинов, можно адаптировать под любые условияЗависит от посещаемости сайта, возможны задержки запуска задач
Внешний cron со скриптом WP-CLIНадежный запуск по расписанию, подходит для больших сайтовТребует доступа к серверу и навыков работы с консолью
Плагин для управления запасамиПростая настройка, дополнительные функции учета запасовМожет влиять на производительность, ограниченная кастомизация
WooCommerce: как найти и исправить дублирующиеся артикулы (SKU) в продуктах
04.05.2026
Как добавить поле с вариантами в выводе продуктов WooCommerce для удобства выбора
13.12.2025
WooCommerce: как найти и исправить дублирующиеся артикулы (SKU) в продуктах
15.05.2026
Автоматическое удаление неактивных вариантов товаров в WooCommerce по расписанию
30.06.2026
WooCommerce: автоматическое изменение цен и скидок по расписанию без плагинов
07.05.2026