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

Почему важно удалять старый контент в WooCommerce

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

Диагностика проблемы: как выявить устаревший контент

Для начала нужно понять, какие товары и заказы считаются «старыми» в вашем магазине. Обычно это:

  • Товары, дата публикации которых старше заданного срока (например, 1 год).
  • Заказы, которые были созданы или завершены более 6 месяцев назад и не требуют дальнейшей обработки.

Для диагностики можно использовать запросы к базе данных или плагины для анализа WooCommerce.

Пример запроса для подсчёта товаров старше 1 года

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'product' AND post_date < DATE_SUB(NOW(), INTERVAL 1 YEAR);

Пример запроса для подсчёта заказов старше 6 месяцев

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_date < DATE_SUB(NOW(), INTERVAL 6 MONTH);

Пошаговое решение: удаление старых товаров и заказов через wp-cron

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

1. Регистрируем задачу cron

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

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

add_action('delete_old_woocommerce_content', function() {
    global $wpdb;

    // Удаляем товары старше 1 года
    $old_products = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'product' AND post_date < %s",
        date('Y-m-d H:i:s', strtotime('-1 year'))
    ));

    foreach ($old_products as $product_id) {
        wp_delete_post($product_id, true); // true - без перемещения в корзину
    }

    // Удаляем заказы старше 6 месяцев
    $old_orders = $wpdb->get_col($wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_date < %s",
        date('Y-m-d H:i:s', strtotime('-6 months'))
    ));

    foreach ($old_orders as $order_id) {
        wp_delete_post($order_id, true);
    }
});

3. Очистка связанной мета-информации

Функция wp_delete_post удаляет все связанные мета-данные и таксономии, поэтому дополнительных действий обычно не требуется.

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

  • В админке WooCommerce проверьте количество товаров и заказов старше указанных сроков до и после запуска cron.
  • Можно временно заменить интервал cron с «daily» на «hourly» для ускоренного тестирования.
  • Добавьте логирование в функцию удаления для контроля, например:
error_log('Удалён товар ID: ' . $product_id);
error_log('Удалён заказ ID: ' . $order_id);

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

  • Задача WP Cron не запускается: Часто связано с низким трафиком сайта. Для отладки используйте плагины типа WP Crontrol или настройте системный cron на сервере.
  • Удаление не происходит: Проверьте, что функция подключена и нет ошибок PHP. Включите WP_DEBUG для отладки.
  • Удаляются нужные товары или заказы: Проверьте корректность условий в запросах по дате. Можно добавить дополнительные фильтры по статусам.
  • Проблемы с производительностью при большом количестве удаляемых записей: Делайте удаление пакетами, например по 50 записей за раз.

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

  • Всегда делайте резервную копию базы перед автоматическим удалением.
  • Перед удалением можно переводить товары и заказы в статус «черновик» или «отменённый» для дополнительной проверки.
  • Используйте транзиенты или флаги, чтобы избежать повторного удаления одних и тех же записей.
  • Оптимизируйте запросы, индексируйте таблицы WooCommerce для ускорения выборок.
  • Для сайтов с большим трафиком и большим каталогом рассмотрите реализацию удаления через WP CLI с батчингом.

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

МетодПлюсыМинусы
WP Cron с кастомным кодомГибкость, автоматизация, не требует сторонних плагиновЗависит от посещаемости сайта, возможны проблемы с производительностью
Плагины для очисткиУдобный интерфейс, дополнительные функцииНагрузка, возможность конфликтов, не всегда бесплатно
WP CLI скриптыВысокая производительность, можно запускать вручную, подходит для больших сайтовТребует доступа к серверу и навыков командной строки

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Как удалить товар из корзины WooCommerce без перезагрузки страницы
27.04.2026
Как удалить товар из корзины WooCommerce без перезагрузки страницы
04.05.2026
Как создать собственный шорткод в WordPress с примером кода
01.11.2025
Как создать автоматический журнал изменений в WordPress с подробными примерами
11.03.2026
Как создать автоматический журнал изменений в WordPress с примерами кода и плагинов
13.04.2026
×

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

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

пишет статьи

готовит SEO

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

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