Автоматическое удаление товаров с нулевым остатком в WooCommerce без плагинов

Почему важно удалять товары с нулевым остатком автоматически?

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

Диагностика: как понять, что товары с нулевым остатком не удаляются?

  • Проверка наличия товаров с нулевым запасом в каталоге.
  • Отсутствие изменений после попыток очистки через админку.
  • Накопление таких товаров приводит к замедлению работы сайта.
  • Мониторинг cron-задач — если нет настроенного автоматического удаления, то товары остаются.

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

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

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

function wp_puzzle_delete_zero_stock_products() {
    if ( ! class_exists( 'WooCommerce' ) ) {
        return;
    }

    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => '_stock',
                'value'   => '0',
                'compare' => '='
            ),
            array(
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '='
            ),
        ),
        'fields'         => 'ids',
    );

    $products = get_posts( $args );

    foreach ( $products as $product_id ) {
        wp_delete_post( $product_id, true ); // true = безвозвратное удаление
    }
}

2. Запуск функции по расписанию (WP-Cron)

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

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

add_action( 'wp_puzzle_daily_zero_stock_cleanup', 'wp_puzzle_delete_zero_stock_products' );

3. Ручной запуск для первичной очистки

Чтобы сразу проверить работу, вызовите функцию вручную в functions.php или через WP-CLI:

wp eval 'wp_puzzle_delete_zero_stock_products();'

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

  • Перейдите в раздел «Товары» в админке WooCommerce и убедитесь, что товары с нулевым запасом удалены.
  • Проверьте таблицу wp_posts в базе данных — записи товаров должны отсутствовать.
  • Посмотрите лог cron-задач с помощью плагина WP Crontrol или через серверный cron, чтобы убедиться, что задача выполняется.

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

  • Не запускается cron-задача: Проверьте, что на сайте есть посетители — WP-Cron зависит от посещаемости. Для стабильности настройте системный cron на сервере.
  • Функция не удаляет товары: Убедитесь, что мета поля _stock и _stock_status существуют и верны. В некоторых версиях WooCommerce может использоваться другое хранение данных о запасах.
  • Удаляются нужные товары: Проверьте условия в meta_query — они должны строго фильтровать только товары с запасом 0 и статусом «outofstock».

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

  • Всегда делайте резервную копию базы данных перед применением массовых удалений.
  • Не выполняйте функцию удаления на сайтах с большим количеством товаров без ограничения запросов — это может привести к таймаутам. Разбейте удаление на партии по 50-100 товаров с помощью posts_per_page.
  • Используйте системный cron для запуска WP-Cron, чтобы задачи выполнялись вовремя без зависимости от посещаемости.
  • Добавьте логирование удалений, чтобы отслеживать удаленные товары и избежать случайных ошибок.

Сравнение вариантов удаления товаров с нулевым остатком

МетодПлюсыМинусыПрименимость
Плагин (например, WP Bulk Delete) Простой интерфейс, много опций, подходит новичкам Дополнительная нагрузка, возможны конфликты Маленькие и средние магазины без навыков кодинга
Код с WP-Cron (описано в статье) Легковесно, кастомизация под проект, без сторонних плагинов Требует навыков PHP, настройка cron Средние и крупные проекты, разработчики
Ручное удаление через админку Просто, без кода Трудоемко, не подходит для большого каталога Маленькие магазины с небольшим ассортиментом

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

⭐⭐⭐⭐⭐
WooCommerce: как автоматически удалять заказы со статусом «Отменен»
14.07.2026
WooCommerce: автоматическое изменение статуса заказа при проблемах с платежной системой
23.06.2026
Как создать уникальный функционал для вывода данных в WordPress с помощью шорткодов
20.02.2026
Как использовать REST API в WordPress для создания приложений
05.12.2025
Оптимизация загрузки шаблонов WordPress для ускорения сайта
16.02.2026
×

AI-плагин

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

SEO и мета-теги

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

Изображения

Комментарии

Подробнее