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

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

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

Как проверить, что товар можно удалять по дате

Для начала убедитесь, что в вашем магазине у товаров корректно проставлена дата публикации (post_date) и она отражает момент появления товара в каталоге. Также проверьте, что товары, которые нужно удалять, не используются в заказах или других важных данных (например, для отчетности).

Для проверки списка товаров по дате используйте WP-CLI или SQL запрос:

SELECT ID, post_title, post_date FROM wp_posts WHERE post_type = 'product' AND post_status = 'publish' ORDER BY post_date ASC LIMIT 10;

Пошаговое решение: как автоматизировать удаление товаров по дате

1. Добавление WP-Cron задачи для регулярной проверки

Добавим в functions.php вашей темы или в кастомный плагин следующий код для регистрации события, которое будет запускаться ежедневно и удалять устаревшие товары.

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

add_action( 'wc_delete_old_products_daily', 'wc_delete_old_products_older_than_90_days' );

function wc_delete_old_products_older_than_90_days() {
    global $wpdb;
    $threshold_date = date( 'Y-m-d H:i:s', strtotime( '-90 days' ) );

    // Получаем ID товаров старше 90 дней
    $old_products = $wpdb->get_col( $wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product' AND post_status = 'publish' AND post_date < %s",
        $threshold_date
    ) );

    if ( ! empty( $old_products ) ) {
        foreach ( $old_products as $product_id ) {
            // Безопасное удаление с проверкой
            wp_delete_post( $product_id, true );
        }
    }
}

2. Настройка периода удаления и безопасности

В данном примере товары старше 90 дней удаляются безвозвратно (wp_delete_post с параметром true). Если хотите сначала переносить в корзину, замените true на false.

Если нужно другой период, измените значение -90 days на нужное (например, -180 days).

3. Запуск задачи вручную для тестирования

Для проверки работы функции без ожидания cron-запуска, вызовите функцию напрямую в файле или через консоль WP-CLI:

wp eval 'wc_delete_old_products_older_than_90_days();'

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

  • Проверьте, что в админке WooCommerce исчезли товары, дата публикации которых старше установленного порога.
  • Выполните SQL-запрос по аналогии с предыдущим для подтверждения удаления.
  • Просмотрите логи cron (если настроены) или используйте плагин WP Crontrol для контроля выполнения задачи.

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

  • Товары не удаляются: проверьте, активна ли WP-Cron, нет ли конфликтов с другими плагинами, и не отключен ли wp_schedule_event.
  • Удаление происходит слишком рано или поздно: проверьте корректность даты в базе и параметр strtotime в функции.
  • Удаляются нужные товары: убедитесь, что условие выборки не слишком общее. Добавьте дополнительные фильтры, например, по категории или метаданным.
  • Потеря данных о заказах: товары с историей заказов лучше не удалять. Можно добавить проверку наличия связанных заказов перед удалением.

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

  • Перед массовым удалением создавайте резервную копию базы.
  • Для больших магазинов используйте постраничную обработку, чтобы избежать таймаутов.
  • Добавьте логирование удалённых товаров для аудита и отката.
  • Если WP-Cron ненадежен, настройте системный cron на сервере для запуска wp-cron.php.

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

МетодПлюсыМинусы
WP-Cron с кастомным кодомГибкость, полная кастомизация, бесплатныйЗависит от посещаемости сайта, требует навыков программирования
Плагины автоматизации (например, WP All Import с триггерами)Удобный интерфейс, поддержка импорта/удаленияПлатные решения, возможны ограничения по функционалу
Ручное удаление через админкуПростота, не требует кодаНебольшая автоматизация, риск ошибок при больших объемах
Оптимизация загрузки шаблонов WordPress для ускорения сайта
02.10.2026
Как удалить все посты и страницы в WordPress быстро и безопасно
29.09.2026
Как избежать проблем с перемещением медиаменеджера в WordPress
13.09.2026
Как создать кастомный метабокс в WordPress: практическое руководство
27.09.2026
Как добавить свое шорткод в WordPress
30.09.2026

Расскажем где можно скачать WordPress с официального сайта на русском языке, где скачать и купить премиум плагины и темы на русском.