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

Почему важно удалять отменённые заказы в WooCommerce

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

Диагностика проблемы: как узнать, есть ли отменённые заказы и их влияние

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

  • В админке WooCommerce перейдите в Заказы и отфильтруйте по статусу Отменён (cancelled).
  • Используйте SQL-запрос для подсчёта отменённых заказов:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled';

Если число заказов значительно (сотни и больше), это повод настроить автоматическое удаление.

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

1. Создаём функцию очистки отменённых заказов

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

function wp24_delete_cancelled_orders() {
    global $wpdb;
    $days_to_keep = 7; // Количество дней для хранения отменённых заказов

    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days_to_keep} days"));

    // Получаем ID заказов со статусом cancelled старше заданного срока
    $order_ids = $wpdb->get_col(
        $wpdb->prepare(
            "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status = 'wc-cancelled' AND post_date < %s",
            $date_threshold
        )
    );

    if (empty($order_ids)) {
        return;
    }

    foreach ($order_ids as $order_id) {
        wp_delete_post($order_id, true); // принудительно удаляем заказ
    }
}

2. Запускаем функцию через WP-Cron

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

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

add_action('wp24_cleanup_cancelled_orders_hook', 'wp24_delete_cancelled_orders');

3. Как изменить интервал и срок хранения

В переменной $days_to_keep можно изменить количество дней, после которых отменённые заказы будут удаляться. Интервал запуска в WP-Cron задан как daily — раз в сутки. При необходимости можно использовать другие интервалы или добавить кастомный.

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

  • Подождите 24 часа или вручную запустите крон-задачу через плагин WP Crontrol.
  • Проверьте количество отменённых заказов в админке WooCommerce и через SQL-запрос.
  • Убедитесь, что удаляются только заказы, старше установленного срока.

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

  • Заказы не удаляются: Проверьте, запускается ли WP-Cron на вашем сервере. На некоторых хостингах требуется настроить системный cron или использовать плагин для имитации cron-задач.
  • Удаляются не те заказы: Убедитесь, что статус заказа указан корректно — WooCommerce использует префикс wc-, например wc-cancelled.
  • Удаление замедляет сайт: Если заказов слишком много, разбейте удаление на порции с помощью параметра LIMIT в SQL и вызывайте функцию несколько раз.

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

  • Для удаления используйте wp_delete_post($order_id, true) с параметром true, чтобы избежать перемещения в корзину и ускорить процесс.
  • Периодически делайте резервное копирование базы перед автоматическими удалениями.
  • Для больших магазинов лучше запускать очистку в нерабочее время, чтобы минимизировать нагрузку.
  • Добавьте логирование удалений, чтобы отслеживать процесс и выявлять ошибки.

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

МетодПлюсыМинусы
Код в functions.php с WP-CronБесплатно, контролируемо, легко настраиваетсяЗависит от работы WP-Cron, требует базовых знаний PHP
Плагин сторонний (например, WP Bulk Delete)Простой интерфейс, дополнительные функцииДополнитель нагрузка и возможные конфликты, ограниченная гибкость
Ручное удаление через админкуПростота, без кодаТрудозатратно, не автоматизировано, риск забыть
Использование хука woocommerce_before_calculate_totals для динамического изменения цен в корзине WooCommerce
04.06.2026
Как избежать ошибок WooCommerce при массовом изменении цен продуктов
26.04.2026
Как установить ограничение на регистрацию в WordPress по домену email
10.02.2026
Как добавить собственные поля в WordPress без плагинов
02.11.2025
Как удалить пустые варианты атрибутов в WooCommerce с помощью кода
31.05.2026