WooCommerce: как автоматически удалять заказы со статусом «Отменен»

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

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

Как автоматически удалять заказы со статусом «отменен»

Шаг 1: Создание функции удаления заказов

Для начала создадим функцию, которая будет находить и удалять заказы со статусом cancelled старше определенного количества дней. В нашем примере — заказы старше 30 дней.

function wpb_delete_old_cancelled_orders() {
    // Количество дней, после которых заказы удаляются
    $days = 30;
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    // Получаем ID заказов со статусом cancelled старше $days
    $args = [
        'status' => 'cancelled',
        'limit' => -1, // без лимита
        'date_created' => '<' . $date,
        'return' => 'ids',
    ];

    $orders = wc_get_orders($args);

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

Шаг 2: Автоматизация с помощью WP-Cron

Чтобы запускать очистку по расписанию, добавим событие в планировщик WordPress. Ниже — регистрация ежедневного задания.

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

add_action('wpb_daily_delete_cancelled_orders', 'wpb_delete_old_cancelled_orders');

Шаг 3: Добавление возможности отключить или изменить период

Вынесите число дней в константу или настройку для гибкости и безопасности.

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

1. Убедитесь, что в админке WooCommerce есть отмененные заказы старше 30 дней.
2. Запустите вручную функцию wpb_delete_old_cancelled_orders() (через WP-CLI или временно в коде).
3. Проверьте, что заказы перемещены в корзину (если используете wp_trash_post) или удалены.
4. Проверьте cron-задания через плагин WP Crontrol, чтобы убедиться, что задача запланирована.
5. На следующий день проверьте, что функция сработала автоматически.

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

  • Неправильный статус заказа: В WooCommerce статус отмененного заказа — cancelled, а не cancel или canceled.
  • Отсутствие прав на удаление: Функция выполняется от имени пользователя с недостаточными правами, что приводит к ошибкам при удалении.
  • WP-Cron не срабатывает: Если на сервере мало трафика или cron отключен, задачи не выполняются автоматически. Проверьте работу WP-Cron или настройте системный cron.
  • Удаление заказов с важной информацией: Убедитесь, что удаление отмененных заказов не нарушает требования бухгалтерии или политики хранения данных.

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

  • Используйте wp_trash_post() вместо wp_delete_post() для возможности восстановления заказов.
  • Добавьте логирование удалений, чтобы отслеживать действия и время очистки.
  • Если заказов много, выполняйте удаление пакетами, чтобы не перегружать сервер.
  • Настройте системный cron для надежного запуска задач, если WP-Cron ненадежен.
  • Перед удалением делайте резервное копирование базы данных.

Таблица сравнения методов удаления заказов

МетодПлюсыМинусы
wp_trash_post()Безопасно, можно восстановить заказЗаказы остаются в базе, не освобождают место
wp_delete_post(true)Полное удаление, освобождение местаУдаление безвозвратно, риск потери данных
Удаление через SQL-запросыОчень быстро при большом объемеРиск повреждения данных, пропуск хуков WooCommerce
Как удалить или изменить все посты при обновлении шаблона WordPress
04.01.2026
Как отключить Emoji в WordPress: пошаговое руководство
07.04.2026
WooCommerce: как добавить пользовательское поле в форму оплаты через хук
08.05.2026
Как добавить собственные настройки в админ-панель WordPress
01.12.2025
WooCommerce: как автоматически удалять товар после отмены заказа
01.05.2026