Автоматическое удаление заказов без оплаты в WooCommerce через 30 дней

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

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

Как определить заказы, подлежащие удалению

Заказы без оплаты в WooCommerce обычно имеют статус pending (ожидает оплаты), failed (неудачная оплата) или on-hold (ожидание подтверждения). Для очистки стоит ориентироваться на дату создания заказа и текущий статус.

Критерии выбора заказов для удаления:

  • Статус заказа — pending, failed или on-hold
  • Дата создания заказа старше 30 дней

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

Добавьте следующий код в файл functions.php вашей темы или в отдельный плагин. Он выполняет удаление заказов без оплаты старше 30 дней при запуске WP-Cron задачи.

function wc_delete_old_unpaid_orders() {
    $args = array(
        'limit'        => -1,
        'status'       => array('pending', 'failed', 'on-hold'),
        'date_created' => '<' . ( new WC_DateTime() )->modify('-30 days')->date('Y-m-d H:i:s'),
        'return'       => 'ids',
    );

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        $order = wc_get_order($order_id);
        if ($order) {
            $order->delete(true); // true - принудительное удаление
        }
    }
}

// Запускаем задачу раз в день
add_action('wp_loaded', function() {
    if (!wp_next_scheduled('wc_daily_delete_unpaid_orders')) {
        wp_schedule_event(time(), 'daily', 'wc_daily_delete_unpaid_orders');
    }
});

add_action('wc_daily_delete_unpaid_orders', 'wc_delete_old_unpaid_orders');

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

Чтобы убедиться, что код работает корректно, выполните следующие шаги:

  1. Создайте тестовый заказ с статусом pending и датой создания старше 30 дней (можно вручную изменить дату через базу или плагин WP CLI).
  2. Запустите вручную событие WP-Cron (через плагин WP Crontrol или вызовом do_action('wc_daily_delete_unpaid_orders'); в админке).
  3. Проверьте, что тестовый заказ удалён из списка заказов WooCommerce.
  4. Убедитесь, что другие заказы с оплатой и актуальными статусами остались нетронутыми.

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

  • Код не запускается автоматически: убедитесь, что WP-Cron работает. Проверьте наличие задачи wc_daily_delete_unpaid_orders в расписании через плагин WP Crontrol.
  • Заказы не удаляются: проверьте права пользователя и доступ к базе данных. Функция delete(true) требует прав на удаление записей.
  • Удаляются не те заказы: проверьте правильность фильтра по статусам и дате. Используйте отладочный вывод через error_log() для проверки выборки заказов.
  • Удаление происходит слишком часто или редко: настройте периодичность cron через параметр wp_schedule_event(). Рекомендуется раз в сутки.

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

  • Выполняйте удаление только по статусам, которые гарантированно не являются оплачеными или активными, чтобы избежать потери данных.
  • Для больших магазинов с тысячами заказов ограничьте количество удаляемых заказов за одно выполнение, добавив параметр limit с разумным числом (например, 100).
  • Перед удалением можно сделать резервную копию базы данных или экспортировать заказы на всякий случай.
  • Используйте плагин Clearfy Pro для оптимизации и очистки базы WooCommerce без лишних усилий.

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

МетодПреимуществаНедостатки
Ручное удаление через админкуКонтроль каждой записи, простотаТрудозатратно при большом количестве заказов
Плагин очистки базыАвтоматизация, удобство, графикЗависимость от стороннего кода, возможные конфликты
Код на wp-cron (предложенный вариант)Полный контроль, кастомизация, без сторонних плагиновТребует навыков разработки, настройка cron
WooCommerce: автоматическое удаление заказов по истечении срока
14.05.2026
Как создать автообновляемые KPI отчеты в WordPress с примерами и плагинами
28.02.2026
Как создать отзывы с оценкой в WordPress: подробный пример и код
20.02.2026
Создание собственного шорткода в WordPress с плагином WPKPI
07.11.2025
Как избежать конфликтов между плагинами WordPress: практические решения
06.12.2025