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

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

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

Проверить количество незавершённых заказов можно через базу данных или административную панель WooCommerce в разделе «Заказы» с фильтрацией по статусам. Если их слишком много и они старше определённого срока, стоит настроить автоматическое удаление.

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

1. Определяем критерии удаления

  • Статусы заказов, которые считаются незавершёнными — например, pending, failed, on-hold.
  • Возраст заказа — например, старше 7 дней.

2. Создаём функцию для удаления

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

function wp1_delete_old_unfinished_orders() {
    if ( ! class_exists( 'WC_Order_Query' ) ) {
        return;
    }

    $statuses = array( 'pending', 'failed', 'on-hold' );
    $days_old = 7; // измените на нужный срок
    $date_before = date( 'Y-m-d H:i:s', strtotime( "-{$days_old} days" ) );

    $query = new WC_Order_Query( array(
        'limit' => -1,
        'status' => $statuses,
        'date_created' => '<' . $date_before,
        'return' => 'ids',
    ) );

    $order_ids = $query->get_orders();

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

    foreach ( $order_ids as $order_id ) {
        wp_delete_post( $order_id, true );
    }
}

3. Добавляем задачу WP-Cron для регулярного запуска

Чтобы функция запускалась, например, раз в сутки, добавьте в functions.php следующий код:

// Регистрируем событие при активации темы или плагина
if ( ! wp_next_scheduled( 'wp1_daily_delete_old_orders' ) ) {
    wp_schedule_event( time(), 'daily', 'wp1_daily_delete_old_orders' );
}

// Хук на выполнение нашей функции
add_action( 'wp1_daily_delete_old_orders', 'wp1_delete_old_unfinished_orders' );

// Очистка расписания при деактивации темы или плагина
function wp1_clear_scheduled_event() {
    $timestamp = wp_next_scheduled( 'wp1_daily_delete_old_orders' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wp1_daily_delete_old_orders' );
    }
}
register_deactivation_hook( __FILE__, 'wp1_clear_scheduled_event' );

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

  • Выполните принудительный запуск функции (можно вызвать wp1_delete_old_unfinished_orders() прямо из админки или через WP-CLI).
  • Проверьте в разделе «Заказы» WooCommerce наличие заказов со статусами pending, failed, on-hold, созданных более 7 дней назад — их не должно остаться.
  • Просмотрите логи сервера, ошибок PHP и WooCommerce на предмет возможных сбоев.

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

  • Функция не запускается по расписанию. Проверьте, активен ли WP-Cron, нет ли конфликтов с плагинами кеширования. Для теста можно вызвать функцию вручную.
  • Заказы не удаляются. Убедитесь, что у вас есть права на удаление заказов, и что функция wp_delete_post вызывается с параметром true для полного удаления.
  • Удаляются не те заказы. Проверьте корректность массива статусов и правильность условий даты.
  • Ошибка из-за отсутствия класса WC_Order_Query. Убедитесь, что WooCommerce активен и загружен до выполнения кода.

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

  • Запускайте удаление в ночное время, чтобы не создавать нагрузку на сайт в пиковые часы.
  • Ограничивайте количество удаляемых заказов за один запуск, например, добавив параметр limit для поэтапного удаления.
  • Делайте резервные копии базы перед автоматическим удалением.
  • Добавьте логирование удалённых заказов для аудита.
  • Используйте Clearfy Pro для дополнительной оптимизации и очистки WooCommerce.

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

МетодПлюсыМинусы
Ручное удаление через админкуПростота, контрольТрудоёмко, не для больших объёмов
Плагины для очистки WooCommerceУдобство, настройка без кодаНагрузка, возможные конфликты, платные функции
Код с WP-Cron (описанный метод)Гибкость, автоматизация, минимальная нагрузкаТребует навыков PHP и тестирования
Custom Post Types в WordPress: практическое руководство по созданию и использованию
10.11.2025
Автоматическое удаление заказов WooCommerce по дате и статусу
09.05.2026
Создать свой шорткод в WordPress: практическое руководство с примерами кода
17.11.2025
Как удалить удалённые медиафайлы из библиотеки WordPress
04.01.2026
Автоматическое удаление незавершённых заказов WooCommerce с помощью кода
25.07.2026