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

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

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

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

Как проверить наличие товаров с нулевым запасом

SELECT ID, post_title, meta_value AS stock_quantity
FROM wp_posts
JOIN wp_postmeta ON wp_posts.ID = wp_postmeta.post_id
WHERE post_type = 'product'
AND meta_key = '_stock'
AND meta_value = '0';

Этот SQL-запрос поможет выявить товары с нулевым запасом в базе данных.

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

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

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

    $products = get_posts($args);

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

2. Регистрируем событие wp_cron для регулярного выполнения

function wc_schedule_out_of_stock_cleanup() {
    if (!wp_next_scheduled('wc_out_of_stock_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'wc_out_of_stock_cleanup_hook');
    }
}
add_action('wp', 'wc_schedule_out_of_stock_cleanup');
add_action('wc_out_of_stock_cleanup_hook', 'wc_delete_out_of_stock_products');

3. Опционально: удаление сразу при сохранении товара с нулевым запасом

function wc_delete_product_on_zero_stock($post_id) {
    if (get_post_type($post_id) !== 'product') {
        return;
    }

    $stock = get_post_meta($post_id, '_stock', true);

    if ((int) $stock === 0) {
        wp_delete_post($post_id, true);
    }
}
add_action('save_post', 'wc_delete_product_on_zero_stock');

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

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

  • Запустите вручную функцию wc_delete_out_of_stock_products() через консоль WP CLI или временно вызовите в functions.php для проверки.
  • Проверьте в админке WooCommerce раздел «Товары» — должны исчезнуть товары с нулевым запасом.
  • Проверьте журнал ошибок и лог wp_cron, если используется плагин для мониторинга cron.
  • Выполните SQL-запрос из раздела диагностики после очистки — он не должен возвращать товары с запасом 0.

Частые ошибки и способы их решения

  • Товары не удаляются после запуска функции: проверьте, что функция вызывается, а wp_delete_post получает правильный ID. Убедитесь, что у пользователя или процесса есть права на удаление.
  • Удаление происходит слишком часто: настройте интервал wp_cron, чтобы не перегружать сервер — достаточно один раз в сутки.
  • Удаляются товары с неправильным запасом: проверьте тип данных и сравнение в meta_query, используйте 'NUMERIC' и строгие проверки.
  • Потеря важных товаров: добавьте дополнительную проверку, например, не удалять товары с активными заказами или специальными метками.

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

  • Резервное копирование: всегда делайте бэкап базы данных перед автоматическим удалением товаров.
  • Использование транзакций: если база данных поддерживает транзакции, можно обернуть удаление в транзакцию для отката в случае ошибки.
  • Оптимизация запросов: выбирайте только ID товаров для снижения нагрузки.
  • Мониторинг cron: используйте плагины типа WP Crontrol для отслеживания и управления заданиями.
  • Уведомления: добавьте отправку email уведомления администратору после удаления товаров.

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

МетодПреимуществаНедостатки
WP Cron (регулярное удаление)Автоматизация, не требует вмешательства пользователяЗависит от посещаемости сайта, возможна задержка выполнения
Удаление при сохранении товараМгновенное удаление, минимальное накопление мусораРиск удаления товаров по ошибке, сложнее откатить
Ручное удаление через админку или SQLПолный контроль, минимальные рискиТребует времени и внимания администратора
Как сделать отзывы с оценками в WordPress без плагинов
18.03.2026
WooCommerce: автоматическое изменение ставки налогов по регионам без плагинов
03.06.2026
Как автоматизировать процесс обновления плагинов WordPress без риска
03.01.2026
Автоматическое удаление товаров с нулевым запасом в WooCommerce
19.04.2026
Как проверить и исправить ошибки в базе данных WordPress
02.03.2026