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

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

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

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

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

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

function wpexperts_delete_out_of_stock_products() {
    // Получаем ID товаров с нулевым остатком
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => '_stock',
                'value'   => '0',
                'compare' => '=',
                'type'    => 'NUMERIC'
            ),
            array(
                'key'     => '_stock_status',
                'value'   => 'outofstock',
                'compare' => '=',
            ),
        ),
        'fields'         => 'ids',
    );
    $products = get_posts($args);

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

2. Настройка Cron-задачи для регулярного запуска функции

Чтобы автоматизировать процесс, зарегистрируем cron-событие, которое будет запускать функцию ежедневно.

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

add_action('wpexperts_daily_delete_out_of_stock', 'wpexperts_delete_out_of_stock_products');

3. Добавление кода в functions.php или кастомный плагин

Рекомендуется добавлять код в кастомный плагин или functions.php дочерней темы для сохранения при обновлениях.

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

  • В административной панели WooCommerce перейдите в список товаров и отфильтруйте товары со статусом «нет в наличии».
  • Запустите вручную функцию, например, через WP-CLI или временно привяжите к кнопке в админке.
  • Проверьте, что товары с нулевым остатком исчезли из каталога.
  • В логе сервера проверьте отсутствие ошибок при выполнении cron-задачи.

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

  • Проблема: Cron-задача не запускается.
    Решение: Убедитесь, что на сайте работает WP-Cron, либо настройте системный cron на сервере для вызова wp-cron.php.
  • Проблема: Товары не удаляются при наличии вариаций.
    Решение: Учтите, что вариативные товары требуют отдельной обработки метаданных вариаций; возможно, необходима доработка функции для удаления вариаций.
  • Проблема: Удаление происходит слишком часто или нерегулярно.
    Решение: Проверьте расписание cron, используйте плагин Query Monitor для диагностики cron-событий.

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

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

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

МетодПлюсыМинусыПример
Ручное удаление через админкуПростотаТрудозатратно, риск пропускаАдминка WooCommerce
Код на PHP с WP-CronАвтоматизация, гибкостьТребует навыков, возможны ошибкиПример кода выше
Плагин для управления запасамиУдобство, поддержкаДоп. нагрузка, возможен конфликтWooCommerce Stock Manager и др.
Как добавить динамические атрибуты к шорткодам WordPress
28.02.2026
Как создать собственный шорткод в WordPress
01.11.2025
Запрет на удаление главной страницы в WordPress
14.04.2026
Создаем собственный виджет WordPress с примером кода
15.11.2025
Удаление неиспользуемых шорткодов в WordPress: как эффективно очистить сайт
04.01.2026