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

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

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

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

1. Использование wp_cron для периодической проверки

Добавим хук для запуска задачи по расписанию, например, раз в сутки:

function wc_schedule_delete_out_of_stock() {
    if ( ! wp_next_scheduled( 'wc_delete_out_of_stock_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'wc_delete_out_of_stock_hook' );
    }
}
add_action( 'wp', 'wc_schedule_delete_out_of_stock' );

2. Функция удаления товаров с нулевым запасом

Реализуем обработчик, который будет искать и удалять такие товары:

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

    $query = new WP_Query( $args );

    if ( $query->have_posts() ) {
        foreach ( $query->posts as $product_id ) {
            wp_trash_post( $product_id ); // Перемещаем в корзину
            // Для окончательного удаления используйте wp_delete_post($product_id, true);
        }
    }
}
add_action( 'wc_delete_out_of_stock_hook', 'wc_delete_out_of_stock' );

3. Очистка корзины (опционально)

Чтобы полностью удалить товары, можно добавить очистку корзины с помощью wp_delete_post с параметром true. Однако будьте осторожны: удаление необратимо.

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

1. В админке WooCommerce проверьте список товаров – товары с нулевым запасом должны исчезнуть после срабатывания задачи.
2. Запустите wp_cron вручную с помощью плагина WP Crontrol или командой WP-CLI:

wp cron event run wc_delete_out_of_stock_hook

3. Проверьте базу данных – таблица wp_posts не должна содержать посты с типом product и мета-ключом _stock_status равным outofstock.

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

  • Проблема: Задача wp_cron не срабатывает.
    Проверьте, включен ли wp_cron в настройках сервера. Для надежности настройте системный cron и вызов wp-cron.php вручную.
  • Проблема: Товары не удаляются, хотя мета _stock_status указывает на outofstock.
    Решение: Убедитесь, что статус товара post_statuspublish. Если товар черновик или архив, измените параметры запроса.
  • Проблема: После удаления товары возвращаются.
    Решение: Проверьте наличие плагинов для восстановления товаров или автоматического обновления запасов.

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

  • Перед удалением товаров создавайте резервную копию базы данных.
  • Вместо wp_delete_post можно использовать wp_trash_post для возможности восстановления.
  • Ограничьте количество удаляемых товаров за одну задачу, если каталог очень большой, чтобы не создавать нагрузку.
  • Используйте WP-CLI для запуска задач удаления на больших сайтах, это надежнее и быстрее.

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

МетодОписаниеПлюсыМинусы
wp_cron + PHP код (как описано) Автоматическая проверка и удаление товаров ежедневно Полный контроль, не требует плагинов Зависит от wp_cron, возможна нагрузка при большом объеме
Плагин для очистки каталога Готовые решения для управления запасами и удалением Удобный интерфейс, дополнительные функции Зависимость от сторонних разработчиков, может быть платным
Ручное удаление в админке Удаление товаров вручную через интерфейс WooCommerce Простота и безопасность Трудозатратно, не подходит для больших магазинов
Как создать автономную систему комментирования в WordPress без плагинов
04.02.2026
Как создать автоматический импорт товара из Excel в WooCommerce без плагинов
17.02.2026
Как использовать WPRemark для автоматического модерирования комментариев в WordPress
25.03.2026
Запрет доступа по IP в WordPress через .htaccess: решение задачи защиты
27.12.2025
Как установить и настроить REST API для собственного плагина
29.11.2025