WooCommerce: автоматическое удаление товаров с нулевым остатком — пошаговое решение

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

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

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

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

  • Перейдите в админку WooCommerce → Товары → выберите товар с нулевым остатком;
  • Проверьте вкладку «Инвентарь» — установлен ли флаг «Управлять запасами» и есть ли остаток 0;
  • Посмотрите на фронтенде, отображается ли товар в каталоге;
  • Если товары видны, значит автоматическое удаление или скрытие не настроено.

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

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

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

    $products = get_posts($args);

    foreach ($products as $product_id) {
        wp_trash_post($product_id); // перемещаем в корзину
    }
}

add_action('wp_scheduled_remove_out_of_stock', 'wp_remove_out_of_stock_products');

// Планируем задачу, если ещё не запланирована
if (!wp_next_scheduled('wp_scheduled_remove_out_of_stock')) {
    wp_schedule_event(time(), 'daily', 'wp_scheduled_remove_out_of_stock');
}

Объяснение кода:

  • Используем get_posts для выборки всех товаров со статусом outofstock (WooCommerce автоматически меняет этот мета-ключ при исчерпании запасов);
  • Удаляем товары с помощью wp_trash_post, что безопаснее полного удаления, так как можно восстановить из корзины;
  • Запускаем эту функцию ежедневно через wp-cron.

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

Если вы хотите удалять товары с запасом ровно 0, а не только со статусом outofstock, используйте такой запрос:

$args = [
    'post_type'      => 'product',
    'posts_per_page' => -1,
    'meta_query'     => [
        [
            'key'     => '_stock',
            'value'   => 0,
            'compare' => '=',
            'type'    => 'NUMERIC'
        ],
    ],
    'fields'         => 'ids',
];

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

  • Запустите задачу вручную через do_action('wp_scheduled_remove_out_of_stock'); в консоли или временно вызовите функцию напрямую;
  • Проверьте, что товары с нулевым остатком перемещены в корзину (раздел «Корзина» в админке товаров);
  • Обновите фронтенд — товары должны исчезнуть из каталога;
  • Просмотрите логи ошибок сервера и debug.log на наличие проблем.

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

  • Товары не удаляются: проверьте, что задача wp-cron работает. Иногда на хостингах cron отключён, тогда нужно настроить системный cron для вызова wp-cron.php;
  • Удаляются не все товары: проверьте правильность мета-запроса. Статус outofstock обновляется только если включено управление запасами;
  • Удаление происходит слишком часто: убедитесь, что событие планируется один раз в сутки — дублирование задач приведёт к нагрузке;
  • Ошибка прав доступа: функция wp_trash_post требует прав администратора, удостоверьтесь, что код выполняется с необходимыми правами.

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

  • Для больших магазинов с тысячами товаров разбивайте удаление на пачки по 50-100 штук, чтобы избежать превышения лимита времени выполнения:
function wp_remove_out_of_stock_products_batch() {
    $args = [
        'post_type'      => 'product',
        'posts_per_page' => 50,
        'meta_query'     => [
            [
                'key'     => '_stock_status',
                'value'   => 'outofstock',
            ],
        ],
        'fields'         => 'ids',
    ];

    $products = get_posts($args);

    if (empty($products)) {
        // Остановить задачу, если товаров больше нет
        wp_clear_scheduled_hook('wp_scheduled_remove_out_of_stock');
        return;
    }

    foreach ($products as $product_id) {
        wp_trash_post($product_id);
    }
}

add_action('wp_scheduled_remove_out_of_stock', 'wp_remove_out_of_stock_products_batch');
  • Регулярно проверяйте раздел «Корзина» и очищайте её, чтобы не накапливать удалённые товары;
  • Настройте резервное копирование перед автоматическим удалением;
  • Если используете кеширование, убедитесь, что оно сбрасывается после удаления товаров, чтобы они исчезали с фронтенда мгновенно.

Таблица сравнения способов удаления товаров с нулевым остатком

МетодПлюсыМинусыКомпромисс
Плагин (например, WP Shop Clearfy)Простая настройка, поддержкаЗависимость от стороннего кода, нагрузкаУдобно, если не умеете писать код
Код с wp-cron (как в статье)Гибкость, без сторонних зависимостейТребует навыков, может нагружать серверОптимизировать под размер магазина
Ручное удалениеПолный контрольТрудозатратно, риск забытьПодходит для маленьких магазинов

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
WooCommerce: автоматическое отключение неиспользуемых плагинов для оптимизации магазина
07.07.2026
WordPress: как удалить пустое место в меню и исправить пробелы между пунктами
08.12.2025
Как создать и использовать собственный Post Type в WordPress: подробное руководство
25.11.2025
Как использовать Meta Box в WordPress для расширения функциональности
27.02.2026
Как полностью настроить страницу входа в WordPress: плагины и примеры кода
10.01.2026
×

AI-плагин

WPGPT
Сам создает статьи для вашего сайта WordPress

SEO и мета-теги

Парсинг конкурентов

Изображения

Комментарии

Подробнее