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

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

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

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

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

В файле functions.php вашей темы или в отдельном плагине добавьте следующий код. Он удаляет заказы со статусом cancelled, которым больше 7 дней, и логирует каждое удаление в файл wp-content/uploads/order-cleanup.log:

function wc_delete_cancelled_orders_with_logging() {
    if ( ! current_user_can( 'manage_woocommerce' ) ) {
        return;
    }

    $args = array(
        'limit'        => -1,
        'status'       => 'cancelled',
        'date_created' => '<' . ( time() - 7 * DAY_IN_SECONDS ),
        'return'       => 'ids',
    );

    $orders = wc_get_orders( $args );
    if ( empty( $orders ) ) {
        return;
    }

    $log_file = WP_CONTENT_DIR . '/uploads/order-cleanup.log';
    $log_entries = array();

    foreach ( $orders as $order_id ) {
        $order = wc_get_order( $order_id );
        if ( $order ) {
            $order_number = $order->get_order_number();
            $order_date = $order->get_date_created()->date('Y-m-d H:i:s');
            $order->delete( true );
            $log_entries[] = sprintf( "%s - deleted cancelled order #%s (ID: %d)", date('Y-m-d H:i:s'), $order_number, $order_id );
        }
    }

    if ( ! empty( $log_entries ) ) {
        file_put_contents( $log_file, implode("\n", $log_entries) . "\n", FILE_APPEND );
    }
}

2. Запускаем удаление по расписанию (cron)

Добавьте хук, который будет запускать функцию ежедневно:

add_action( 'wc_daily_cancelled_order_cleanup', 'wc_delete_cancelled_orders_with_logging' );

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

3. Отключение крон для предотвращения дублирования

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

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

  • Через 24 часа проверьте файл wp-content/uploads/order-cleanup.log — в нём должны появиться записи об удалённых заказах.
  • Проверьте в админке WooCommerce, что заказы со статусом cancelled старше 7 дней удалены.
  • Для теста можно временно уменьшить время удаления с 7 дней до нескольких минут (изменив параметр в 'date_created'), чтобы ускорить проверку.

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

  • Отсутствие прав на запись в файл логов: убедитесь, что папка wp-content/uploads доступна для записи сервером.
  • Крон не срабатывает: проверьте, активен ли WP-Cron, и что нет конфликтов с плагинами, блокирующими задачи cron.
  • Удаляются не те заказы: проверьте правильность фильтра по статусу и дате в параметрах wc_get_orders().
  • Удаление заказов не происходит: проверьте, что функция вызывается и не прерывается ошибками — включите WP_DEBUG для отладки.

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

  • Логируйте только ключевые действия, чтобы не перегружать диск лишними данными.
  • Устанавливайте разумный период хранения заказов перед удалением — 7 дней или более, чтобы избежать случайной потери данных.
  • Используйте отдельный плагин для подобных задач, чтобы не потерять код при обновлении темы.
  • Проверяйте права доступа: функцию удаления должны запускать только администраторы.

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

МетодПлагинКодКомпромисс
Удаление отменённых заказовПлагины автоматизации (например, WP Crontrol + кастомный код)Самописный код с cron-хукамиПлагины проще в настройке, но могут замедлять сайт; код — гибче и легче, но требует навыков
ЛогированиеПлагины с журналированиемЗапись в файл через PHP (как в примере)Плагины предлагают удобный UI, код — минималистичен и не нагружает БД
Автоматическое обновление плагинов и тем в WordPress без риска
28.12.2025
Как автоматизировать удаление старого контента в WordPress
12.02.2026
WooCommerce: как автоматически удалять отменённые заказы с помощью кода
04.06.2026
WooCommerce: как настроить автоматическое удаление отменённых заказов с логированием
07.06.2026
WooCommerce: автоматическое изменение статуса заказа при оплате через платежные системы
28.05.2026

Обучение разработке на WordPress, как создавать темы, плагины. Подробнее об обучении.