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

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

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

Автоматизация удаления по дате создания и статусу товара помогает:

  • Поддерживать каталог в актуальном состоянии
  • Уменьшить нагрузку на базу данных
  • Облегчить администрирование магазина

Как определить товары для удаления: критерии отбора

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

  • Дата создания товара: удалить товары старше определённого периода, например 6 месяцев
  • Статус товара: черновики, ожидающие проверки, отменённые или личные товары
  • Статус наличия: опционально — товары с нулевым запасом

Важно не удалять активные товары с продаж, чтобы не потерять данные и не навредить SEO.

Пошаговое решение: реализация автоматического удаления товаров через WP-Cron

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

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

function wpr_delete_old_woocommerce_products() {
    // Параметры: товары старше 180 дней, статус 'draft' или 'pending'
    $args = array(
        'post_type'      => 'product',
        'post_status'    => array('draft', 'pending'),
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => '180 days ago',
            ),
        ),
        'posts_per_page' => 50, // ограничение за раз
        'fields'         => 'ids',
    );

    $query = new WP_Query($args);

    if($query->have_posts()) {
        foreach($query->posts as $product_id) {
            wp_delete_post($product_id, true); // жесткое удаление
        }
    }
}

2. Регистрация WP-Cron задачи для регулярного вызова

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

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

add_action('wpr_daily_product_deletion', 'wpr_delete_old_woocommerce_products');

3. Удаление товаров по статусу и дате

Функция wpr_delete_old_woocommerce_products будет запускаться каждый день и удалять 50 товаров за раз, чтобы избежать перегрузки сервера.

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

Чтобы убедиться, что удаление работает корректно:

  • Создайте тестовые товары с нужным статусом и датой старше 180 дней (можно изменить дату через phpMyAdmin или WP CLI)
  • Запустите вручную функцию через do_action('wpr_daily_product_deletion'); или дождитесь ежедневного запуска
  • Проверьте, что товары удалены из админки WooCommerce и базы данных
  • Проверьте логи ошибок и нагрузку сервера

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

  • Товары не удаляются: проверьте, что WP-Cron работает (можно использовать плагин WP Crontrol), убедитесь, что статусы и даты совпадают с запросом
  • Удаляются не те товары: внимательно проверьте параметры post_status и date_query
  • Перегрузка сервера: уменьшите posts_per_page или увеличьте интервал запуска задачи
  • Потеря важных данных: всегда делайте резервные копии перед автоматическим удалением, можно добавить дополнительное условие для проверки наличия заказов с товаром

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

  • Используйте wp_delete_post($id, true) для полного удаления, если нужно очистить базу, иначе передайте false для помещения в корзину
  • Добавьте логирование удалённых товаров в отдельный файл или таблицу для аудита
  • Для больших магазинов лучше запускать удаление через WP CLI скрипты или внешние cron-задачи, чтобы избежать ограничений PHP
  • Перед удалением проверяйте, что товар не используется в активных заказах, иначе можно нарушить целостность данных
  • Используйте плагин Clearfy Pro https://wpshop.ru/plugins/clearfy?utm_source=wpreset.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udaleniye-tovarov-po-date-i-statusu для оптимизации базы и удаления дублей, что дополнительно ускорит работу WooCommerce

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

МетодПлюсыМинусы
WP-Cron + кастомный кодГибкость, настраиваемые критерии, бесплатноЗависит от посещаемости сайта, возможны задержки
Настоящий системный cron + WP CLIНадёжно, не зависит от посещаемости, высокая производительностьТребует SSH-доступа, настройка сложнее
Плагины для автоматизацииПростота внедрения, UI для настроекМогут снижать производительность, ограниченная кастомизация
Автоматическое удаление неактивных пользователей в WordPress: настройка и примеры кода
29.04.2026
Как создать свой шорткод в WordPress с примерами кода
17.11.2025
Как создать и использовать собственные типы записей (Custom Post Types) в WordPress
22.11.2025
WooCommerce: автоматическое удаление товаров по дате и статусу
06.07.2026
Как избежать конфликтов между плагинами WordPress: практические решения
17.03.2026