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

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

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

Ключевая проблема — как настроить автоматическое удаление товаров, которые были опубликованы более определённого периода назад (например, 90 дней), без потери других данных и с минимальной нагрузкой на сайт.

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

Шаг 1. Создание WP-Cron задачи

Чтобы автоматизировать процесс, используем встроенный планировщик задач WordPress (WP-Cron). Он будет запускать функцию удаления регулярно, например, раз в сутки.

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

Шаг 2. Функция удаления старых товаров

Создадим функцию, которая найдёт все товары, опубликованные более 90 дней назад, и удалит их без возможности восстановления (force delete).

function wprus_delete_old_products() {
    $args = [
        'post_type'      => 'product',
        'post_status'    => 'publish',
        'date_query'     => [
            [
                'column' => 'post_date',
                'before' => '90 days ago',
            ],
        ],
        'fields'         => 'ids',
        'posts_per_page' => -1,
    ];

    $old_products = get_posts( $args );

    if ( empty( $old_products ) ) {
        return; // Нет товаров для удаления
    }

    foreach ( $old_products as $product_id ) {
        wp_delete_post( $product_id, true ); // force delete
    }
}
add_action( 'wprus_delete_old_products_daily', 'wprus_delete_old_products' );

Шаг 3. Подключение к functions.php или собственному плагину

Вставьте оба кода (запланирование и функцию) в файл functions.php активной темы или создайте небольшой плагин для изоляции кода.

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

  1. Запустите вручную задачу для теста, вызвав функцию напрямую, например, из консоли WP-CLI или временно добавив вызов wprus_delete_old_products(); в functions.php.
  2. Проверьте, что товары с датой публикации старше 90 дней удалились.
  3. Убедитесь, что остальные товары остались без изменений.
  4. В админке WooCommerce и в базе данных (таблица wp_posts) должны отсутствовать удалённые товары.

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

  • Задача не запускается автоматически — проверьте, что WP-Cron активен и на сайте есть регулярный трафик, иначе WP-Cron не сработает. Для теста можно запустить вручную do_action('wprus_delete_old_products_daily');.
  • Удаляются не те товары — проверьте параметры date_query и post_type. Важно, чтобы post_type был именно product.
  • Товары не удаляются — убедитесь, что у пользователя достаточно прав, и что функция вызывается в правильном контексте. При форсированном удалении используется wp_delete_post с параметром true.
  • Нагрузка на сайт при удалении большого количества товаров — разбейте удаление на части, используя параметр posts_per_page и пагинацию.

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

  • Не удаляйте товары сразу, если они могут понадобиться для аналитики — лучше перевести их в статус черновика или архивировать.
  • Добавьте логирование, чтобы отслеживать какие товары и когда удаляются, например, записывая ID в отдельный лог-файл.
  • Если у вас большой магазин, используйте WP-CLI для пакетного удаления — это уменьшит нагрузку и избавит от таймаутов.
  • Регулярно делайте резервные копии базы, чтобы можно было восстановить данные в случае ошибки.

Сравнение подходов: Плагин vs Код vs Компромисс

ПодходПлюсыМинусыКогда использовать
Готовый плагин (например, WP Bulk Delete) Удобный интерфейс, поддержка, дополнительные фильтры Может быть избыточным, дополнительная нагрузка, возможны конфликты Если нужно быстро и с минимальными знаниями
Код на functions.php (как в статье) Лёгкий, быстрый, точечный контроль, нет лишних функций Требует навыков, нужно тестировать, нет интерфейса Если вы разработчик и хотите кастомное решение
Компромисс (код + простой плагин для Cron) Управление Cron, логирование и кастомная логика Нужно поддерживать оба компонента Для средних проектов с нуждой в гибкости

Чек-лист внедрения автоматического удаления товаров

  • Определить критерий удаления (например, 90 дней с публикации)
  • Добавить в functions.php код планировщика WP-Cron
  • Реализовать функцию выборки и удаления товаров
  • Проверить работу функции вручную
  • Мониторить логи и производительность после запуска
  • Обеспечить резервное копирование перед массовым удалением
  • Оптимизировать код для больших каталогов (пагинация)
Как избежать проблем с перемещением менеджера медиа в WordPress
29.12.2025
Автоматическое обновление статуса заказа WooCommerce по оплате через код
08.05.2026
Как устроить эффективный кэш в WordPress через Redis
15.02.2026
Как удалить все посты и страницы в WordPress быстро и безопасно
27.11.2025
Как сделать динамические скриптовые блоки в WordPress с помощью AJAX
17.01.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше