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

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

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

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

Для начала надо проверить, как WooCommerce обрабатывает товары с нулевым остатком. Зайдите в админку WooCommerce → Товары и отфильтруйте товары со статусом «В наличии» или с количеством 0. Если товары с нулевым остатком отображаются в магазине, значит автоматическое удаление не настроено.

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

Реализуем крон-задачу, которая будет ежедневно проверять складские остатки и удалять товары с 0 на складе.

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

function wpmeta_delete_out_of_stock_products() {
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => '_stock_status',
                'value' => 'outofstock',
            ),
        ),
        'fields' => 'ids',
    );
    $products = get_posts($args);
    foreach ($products as $product_id) {
        wp_delete_post($product_id, true); // true для полного удаления
    }
}

2. Регистрируем WP-Cron событие для ежедневного запуска

function wpmeta_schedule_daily_product_deletion() {
    if (!wp_next_scheduled('wpmeta_daily_delete_out_of_stock_products')) {
        wp_schedule_event(time(), 'daily', 'wpmeta_daily_delete_out_of_stock_products');
    }
}
add_action('wp', 'wpmeta_schedule_daily_product_deletion');

add_action('wpmeta_daily_delete_out_of_stock_products', 'wpmeta_delete_out_of_stock_products');

3. Как запустить задачу вручную для теста

Для проверки можно вызвать функцию напрямую в шаблоне или через консоль WP-CLI:

wp eval 'wpmeta_delete_out_of_stock_products();'

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

  • Зайдите в WooCommerce → Товары и убедитесь, что товары с запасом 0 удалены.
  • Посмотрите логи или используйте плагин Debug Bar для проверки запуска cron-задачи.
  • Для дополнительной диагностики можно добавить логирование в функцию удаления:
function wpmeta_delete_out_of_stock_products() {
    $args = array(
        'post_type' => 'product',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => '_stock_status',
                'value' => 'outofstock',
            ),
        ),
        'fields' => 'ids',
    );
    $products = get_posts($args);
    foreach ($products as $product_id) {
        error_log('Deleting product ID: ' . $product_id);
        wp_delete_post($product_id, true);
    }
}

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

  • Крон-задача не запускается: проверьте, что на сайте активен WP-Cron и нет конфликтов с плагинами кэширования. Для теста можно вызвать функцию вручную.
  • Товары не удаляются, хотя статус «outofstock»: убедитесь, что у товаров действительно установлен мета-ключ _stock_status со значением outofstock. Иногда WooCommerce может выставлять другой статус, тогда придется адаптировать мета-запрос.
  • Удаление слишком агрессивное: если нужно не удалять, а просто скрывать товары, используйте изменение статуса поста draft вместо полного удаления.

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

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

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

МетодПлюсыМинусыПример
Код с WP-Cron Автоматизация, гибкость, без сторонних плагинов Нужны навыки PHP, возможны проблемы с cron wp_schedule_event + wp_delete_post()
Плагин управления остатками Простота, GUI, поддержка Может замедлять сайт, платные функции WooCommerce Stock Manager
Ручное удаление из админки Просто для небольших магазинов Ручной труд, риск ошибки Удаление товаров через интерфейс
Как удалить записи по meta-полям в WordPress
09.04.2026
Как создать собственный виджет в WordPress: практическое руководство
10.11.2025
Как правильно работать с post meta в WordPress без ошибок
23.01.2026
WooCommerce: авторизация по телефонному номеру без пароля
30.04.2026
Как автоматизировать удаление старых постов в WordPress по разным критериям
03.04.2026

Совсем скоро здесь откроется ресурс о вордпресс.