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

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

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

Чтобы проверить текущее количество заказов по статусам, используйте запрос к базе данных или плагины для администрирования:

SELECT post_status, COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' GROUP BY post_status;

Это даст понимание, какие статусы доминируют и сколько заказов можно очистить.

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

Шаг 1. Определить логику удаления

Например, удалять заказы со статусом cancelled и failed, созданные более 30 дней назад.

Шаг 2. Создать функцию для выборки и удаления заказов

function wc_delete_old_orders_by_status() {
    // Даты и статусы
    $days = 30;
    $statuses = array('wc-cancelled', 'wc-failed');
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => $statuses,
        'date_query'     => array(
            'before' => $date,
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $orders = get_posts($args);

    if (!empty($orders)) {
        foreach ($orders as $order_id) {
            wp_delete_post($order_id, true); // true для полного удаления
        }
    }
}

Шаг 3. Запланировать регулярное выполнение

Добавьте cron-задачу WordPress, которая будет запускать удаление раз в неделю:

if (!wp_next_scheduled('wc_delete_old_orders_cron_hook')) {
    wp_schedule_event(time(), 'weekly', 'wc_delete_old_orders_cron_hook');
}

add_action('wc_delete_old_orders_cron_hook', 'wc_delete_old_orders_by_status');

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

После запуска скрипта проверьте количество удалённых заказов:

  • В админке WooCommerce — уменьшилось ли число заказов со статусами cancelled и failed.
  • Через запрос к базе, аналогичный приведённому выше: число заказов с этими статусами должно уменьшиться.
  • Логи cron-задач (можно добавить логирование в функцию удаления для контроля).

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

  • orders не удаляются: Проверьте, что статусы указаны с префиксом wc- (например, wc-cancelled). Без этого заказ не найдётся.
  • wp_delete_post не удаляет заказы полностью: используйте второй параметр true для полного удаления, иначе заказ перейдёт в корзину.
  • cron-задача не запускается: убедитесь, что WordPress cron включён и посещают сайт, или настройте системный cron для wp-cron.php.
  • слишком много заказов на удаление: для больших баз используйте постраничную обработку (пагинацию), чтобы избежать таймаутов.

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

  • Перед удалением сделайте резервную копию базы данных.
  • Для больших объёмов заказов используйте batch-обработку с ограничением posts_per_page.
  • Логируйте удалённые заказы в отдельный файл для аудита.
  • Отключайте скрипт удаления при обновлении WooCommerce, чтобы избежать конфликтов.

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

МетодПлюсыМинусыРекомендации
Ручное удаление через админкуПросто, не требует кодаТрудоёмко, не подходит для большого количестваДля единичных случаев
Плагин автоматического удаленияУдобно, настройка через UIМожет влиять на производительность, лишние плагиныЕсли не хотите писать код
Кодовая реализация с WP-CronКонтроль, гибкость, без дополнительных плагиновТребует навыков, нужно следить за cronОптимально для разработчиков
Как использовать WPScan для быстрого аудита безопасности WordPress
25.01.2026
Автоматическое удаление отключённых заказов WooCommerce с помощью кода
15.06.2026
Как создать и настроить внешние API ключи в WordPress
10.12.2025
Как защитить WordPress от атак с помощью Content Security Policy
20.12.2025
Как защитить WordPress от фейковых регистраций и ботов: практические методы и примеры
09.03.2026