WooCommerce: автоматическое удаление отсутствующих товаров из каталога

Проблема отсутствующих товаров в WooCommerce

При ведении интернет-магазина на WooCommerce часто возникает ситуация, когда товары перестают быть доступными: они могут быть временно распроданы, сняты с производства или более не поддерживаются. Если таких товаров много, вручную их удалять неудобно, а наличие отсутствующих позиций в каталоге ухудшает UX и может привести к потерям продаж.

Автоматизация удаления таких товаров поможет поддерживать каталог в актуальном состоянии без ручного вмешательства.

Диагностика: как определить отсутствующие товары в WooCommerce

Отсутствующие товары обычно:

  • имеют статус «черновик» или «в ожидании»;
  • имеют нулевой или отрицательный остаток на складе (если включено управление запасами);
  • отмечены определенной пользовательской меткой или категорией «out-of-stock».

Для простоты примера рассмотрим вариант, когда товары с запасом 0 и статусом «publish» считаются отсутствующими.

Пошаговое решение: скрипт для автоматического удаления отсутствующих товаров

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

function wporder_remove_out_of_stock_products() {
    // Получаем ID товаров с запасом 0
    $args = array(
        'post_type'      => 'product',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => '_stock',
                'value'   => 0,
                'compare' => '=',
                'type'    => 'NUMERIC'
            ),
        ),
        'post_status'    => 'publish'
    );
    $query = new WP_Query($args);

    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            wp_delete_post(get_the_ID(), true); // жесткое удаление
        }
    }
    wp_reset_postdata();
}

2. Добавляем запуск функции по расписанию (пример: раз в сутки)

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

add_action('wporder_daily_remove_out_of_stock', 'wporder_remove_out_of_stock_products');

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

add_action('admin_menu', function() {
    add_submenu_page(
        'woocommerce',
        'Удалить отсутствующие товары',
        'Удалить отсутствующие',
        'manage_woocommerce',
        'wporder-remove-out-of-stock',
        function() {
            if (isset($_POST['wporder_remove'])) {
                wporder_remove_out_of_stock_products();
                echo '<div class="updated notice">Отсутствующие товары удалены.</div>';
            }
            echo '<form method="post"><input type="submit" name="wporder_remove" class="button button-primary" value="Удалить отсутствующие товары" /></form>';
        }
    );
});

Проверка результата

  • Перейдите в раздел «Товары» админки WooCommerce и примените фильтр по запасу (если есть).
  • Убедитесь, что товары с запасом 0 удалены.
  • Проверьте логи сайта на предмет ошибок при выполнении скрипта.
  • Если используется cron-задача, убедитесь, что она срабатывает (используйте плагин WP Crontrol).

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

  • Товары не удаляются: проверьте, что функция запускается (например, через admin_menu). Возможно, cron-задача не активирована.
  • Удаляются нужные товары: уточните условие выборки, возможно, нужно добавить проверку категории или статуса.
  • Проблемы с производительностью: если товаров много, разбейте удаление на порции, используйте WP CLI.
  • Ошибки доступа: убедитесь, что пользователь имеет права manage_woocommerce для запуска функции.

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

  • Используйте wp_delete_post с параметром true для полного удаления, не оставляя в корзине.
  • Добавьте проверку nonce и capability для ручного запуска из админки.
  • Для крупных магазинов используйте WP CLI для пакетного удаления товаров.
  • Регулярно создавайте резервные копии базы данных перед массовыми операциями.
  • Если используется кастомное управление запасами, адаптируйте метаполя в запросе.

Сравнение способов удаления отсутствующих товаров

МетодПреимуществаНедостаткиРекомендации
WP Cron автоматическийАвтоматизация без участия пользователяЗависит от посещаемости сайта, возможна задержкаДля средних и небольших магазинов
Ручной запуск из админкиКонтроль запуска, мгновенный результатНужно время и внимание администратораДля небольших магазинов или тестирования
WP CLIВысокая производительность, подходит для больших магазиновТребуется доступ к серверу через SSHДля крупных проектов с большим количеством товаров
Автоматизация подсчёта суммы заказов по датам в WordPress
11.02.2026
Автоматическое создание и обновление заказов через REST API WordPress
14.04.2026
Как создать автоматический импорт товаров в WordPress из CSV файла
15.12.2025
Как автоматизировать отправку отзывов после заказа WooCommerce
10.04.2026
Автоматизация обновления метаданных товаров WooCommerce в WordPress
07.04.2026