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

Диагностика проблемы с отменёнными заказами в WooCommerce

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

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

1. Создание пользовательской функции удаления отменённых заказов

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

function wpmy_delete_cancelled_orders() {
    global $wpdb;
    // Получаем ID заказов со статусом cancelled старше 7 дней
    $days = 7;
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    $orders = wc_get_orders(array(
        'limit' => -1,
        'status' => 'cancelled',
        'date_created' => '<' . $date_threshold,
        'return' => 'ids',
    ));

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

2. Подключение функции к WP-Cron для автоматического запуска

Добавьте событие в расписание WordPress. Например, запуск раз в сутки:

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

add_action('wpmy_daily_cancelled_orders_cleanup', 'wpmy_delete_cancelled_orders');

3. Как проверить, что очистка работает

  • Создайте тестовый заказ в WooCommerce и отмените его.
  • Измените в коде значение $days на 0, чтобы удалять заказы сразу.
  • Выполните вручную событие WP-Cron через плагин WP Crontrol или с помощью вызова URL wp-cron.php.
  • Проверьте, что заказ исчез из списка заказов WooCommerce.

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

  • Заказы не удаляются: Убедитесь, что статус заказа действительно cancelled, а не failed или refunded. Для проверки используйте админку или запрос через wc_get_orders().
  • WP-Cron не срабатывает: Проверьте, что на сайте не отключён WP-Cron (DISABLE_WP_CRON не должен быть true). Для теста запустите воркфлоу вручную через плагин WP Crontrol.
  • Удаление не полное: Используйте параметр wp_delete_post($order_id, true) для полного удаления, иначе запись будет в корзине.

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

  • Не удаляйте заказы, если они могут понадобиться для отчетности. Лучше использовать фильтр по дате создания (например, старше 30 дней).
  • Планируйте очистку в периоды низкой нагрузки, чтобы не создавать дополнительный стресс для базы данных.
  • Используйте Clearfy Pro для дополнительной оптимизации базы данных и удаления мусора.

Сравнение подходов к удалению отменённых заказов

МетодПлюсыМинусы
Ручное удаление через админкуПростота, контроль каждого заказаЗатратно по времени, риск пропуска заказов
Автоматизация через WP-Cron и кодПолная автоматизация, гибкость настройкиНужны навыки программирования, возможные ошибки при неправильном коде
Плагины очистки базы данныхПростота, дополнительные функции оптимизацииМогут удалять лишнее, нагрузка на сервер
Как отключить XML-RPC в WordPress для защиты сайта
10.03.2026
WooCommerce: как автоматически удалять зависшие отменённые заказы
30.05.2026
Как использовать WP-Cron для автоматизации задач в WordPress
14.01.2026
Как создать собственный виджет WordPress с примерами кода
26.11.2025
WooCommerce: автоматическое удаление отменённых заказов по расписанию
03.07.2026