WooCommerce: как автоматически удалять товары без склада из каталога

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

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

Как определить товары без склада в WooCommerce

WooCommerce хранит информацию о запасах товара в метаполях и свойствах продукта. Основные способы определить, что товар без склада:

  • Проверка поля _stock_status — должно быть instock или outofstock.
  • Проверка количества на складе _stock (числовое значение).
  • Учет настроек управления запасами: если управление запасами отключено для товара, то он всегда в наличии.

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

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

Опишем решение на чистом PHP для функционала в functions.php вашей темы или в кастомном плагине.

1. Создаем функцию для удаления товаров без склада

function wpfaq_delete_out_of_stock_products() {
    // Получаем ID товаров с статусом "outofstock"
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => [
            [
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '=',
            ],
        ],
        'fields'         => 'ids',
        'post_status'    => 'publish',
    ];
    $products = get_posts($args);

    // Удаляем товары без склада
    foreach ($products as $product_id) {
        wp_delete_post($product_id, true); // true - удаление без возможности восстановления
    }
}

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

if (!wp_next_scheduled('wpfaq_daily_delete_out_of_stock')) {
    wp_schedule_event(time(), 'daily', 'wpfaq_daily_delete_out_of_stock');
}

add_action('wpfaq_daily_delete_out_of_stock', 'wpfaq_delete_out_of_stock_products');

3. Очистка крон-задачи при деактивации

function wpfaq_deactivate_plugin() {
    $timestamp = wp_next_scheduled('wpfaq_daily_delete_out_of_stock');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpfaq_daily_delete_out_of_stock');
    }
}
register_deactivation_hook(__FILE__, 'wpfaq_deactivate_plugin');

Как проверить, что автоматическое удаление работает

  • В админке WooCommerce создайте тестовый товар с количеством на складе 0 и статусом outofstock.
  • Запустите функцию вручную через консоль WP-CLI или временно вызовите wpfaq_delete_out_of_stock_products() из functions.php.
  • Убедитесь, что товар удалился из списка продуктов.
  • Проверьте, что в дальнейшем по расписанию (ежедневно) товары с таким статусом будут удаляться автоматически.

Частые ошибки и нюансы при реализации

  • Не удаляются товары с вариациями: Вариации имеют собственный статус запаса. Функция выше работает только с простыми товарами. Для вариаций нужно отдельно проверять статусы и удалять родительский товар или вариацию.
  • Удаление без резервного копирования: Используйте wp_delete_post($id, false) для перемещения товара в корзину, если хотите возможность восстановления.
  • Крон-задачи не работают: Проверьте, что на хостинге разрешено WP-Cron, или настройте системное cron-задание для wp-cron.php.
  • Товары с отключенным управлением запасами не учитываются: Если у товара отключено управление запасами, он всегда считается в наличии, даже если количество 0.

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

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

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

МетодПреимуществаНедостатки
Ручное удаление через админкуПростота, точечное управлениеНеэффективно при большом каталоге, требует времени
Автоматизация через WP-Cron (код)Полная автоматизация, гибкость настройкиТребует навыков программирования, настройка cron на сервере
Плагины для управления запасами и очисткиУдобный интерфейс, дополнительные функцииНагрузка на сайт, могут быть платными
Удаление неиспользуемых метаданных в WordPress для оптимизации базы данных
15.11.2025
Оптимальные хуки для улучшения производительности WordPress
29.11.2025
Как отключить регистрацию по бесплатным email в WordPress
21.03.2026
WooCommerce: решение проблемы с исчезновением SKU после изменения атрибутов товара
23.05.2026
WooCommerce: решение проблемы с отображением товаров после обновления кеша
11.05.2026