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

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

С ростом интернет-магазина на WooCommerce количество заказов в базе данных может достигать десятков и сотен тысяч. Это негативно сказывается на производительности сайта: увеличивается размер базы, замедляется выполнение запросов и резервное копирование. При этом многие старые или отменённые заказы не нужны для дальнейшей работы, если их сохранение не регламентировано законодательством или внутренними процессами.

Задача — регулярно автоматизировать удаление заказов определённого возраста и статуса, а также очистку связанных с ними данных, чтобы сохранить базу компактной и ускорить работу WooCommerce.

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

1. Определяем критерии удаления заказов

Обычно удаляют заказы со статусами cancelled, failed и refunded, которым больше определённого количества дней (например, 30 или 60). Активные или завершённые заказы (completed, processing) обычно не трогаем.

2. Создаём функцию для удаления заказов

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

function wc_delete_old_orders() {
    $days = 30; // количество дней для хранения заказов
    $statuses = array('cancelled', 'failed', 'refunded');

    $date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));

    $args = array(
        'status' => $statuses,
        'date_created' => '<' . $date,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_trash_post($order_id); // перемещаем заказ в корзину
        }
    }
}

3. Автоматизация через cron-задачу WordPress

Добавьте следующий код для регистрации события и запуска его раз в сутки:

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

add_action('wc_daily_old_orders_cleanup', 'wc_delete_old_orders');

4. Очистка корзины заказов

Удалённые заказы попадают в корзину (статус trash), их стоит периодически окончательно удалять:

function wc_empty_orders_trash() {
    global $wpdb;
    $wpdb->query(
        "DELETE FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status = 'trash'"
    );
}

// Очистка корзины раз в неделю
if (!wp_next_scheduled('wc_weekly_empty_orders_trash')) {
    wp_schedule_event(time(), 'weekly', 'wc_weekly_empty_orders_trash');
}
add_action('wc_weekly_empty_orders_trash', 'wc_empty_orders_trash');

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

  • В админке WooCommerce перейдите в раздел «Заказы» и проверьте, что заказы старше 30 дней со статусами cancelled, failed, refunded исчезли.
  • Посмотрите таблицу wp_posts — записи с post_type = shop_order и статусом trash должны удаляться раз в неделю.
  • Используйте плагин Query Monitor для проверки времени выполнения запросов к базе — должно улучшиться.
  • Проверьте логи cron-задач через WP Crontrol (плагин) — задачи запускаются как запланировано.

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

  • Удаление важных заказов: Некорректно заданы статусы или дата — проверьте переменную $statuses и дату в коде.
  • Крон-задачи не запускаются: Убедитесь, что wp-cron активен и на сайте есть трафик, иначе используйте системный cron для вызова wp-cron.php.
  • Заказы не удаляются, а только попадают в корзину: Добавьте отдельную задачу для очистки корзины, как показано выше.
  • Проблемы с производительностью при удалении большого количества заказов: Делайте удаление партиями по 50-100 заказов, чтобы избежать таймаутов.

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

  • Перед внедрением на рабочем сайте сделайте полную резервную копию базы данных.
  • Используйте транзакции или batch-удаления при большом объёме заказов, чтобы избежать потери данных.
  • Ограничьте права доступа к функциям удаления заказов, чтобы только администраторы могли запускать эти процессы.
  • Оптимизируйте базу данных после удаления заказов с помощью WP-CLI или плагинов типа Clearfy Pro (подробнее).

Сравнение методов удаления заказов: плагин против кода

МетодПлюсыМинусыПодходит для
Плагин (например WP Bulk Delete)Простота настройки, графический интерфейс, дополнительные фильтрыДополнительная нагрузка, зависимость от стороннего кодаНебольшие магазины, администраторы без навыков программирования
Кастомный код (cron + wc_get_orders)Лёгкий, не требует дополнительных плагинов, гибкая настройкаТребует навыков разработки, нужно тестироватьСредние и крупные проекты, разработчики

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

⭐⭐⭐⭐⭐
Как удалить дублирующийся контент в WordPress: практические методы и примеры
22.11.2025
Как избежать проблем с транслитерацией меток (тегов) в WordPress: практическое руководство
02.04.2026
Как создать автоматический бэкап в WordPress без плагинов
29.11.2025
WooCommerce: автоматическое отключение неактивных способов оплаты
17.06.2026
Как избежать проблем с кэшированием в WordPress: практические советы
02.03.2026
×
-15%
на премиум плагин
My Popup

Повысьте конверсию!

Получить скидку »