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

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

В интернет-магазинах на WooCommerce часто возникает ситуация, когда неоплаченные заказы (статус "on-hold" или "pending") накапливаются в базе. Это приводит к засорению базы данных, усложняет управление заказами и негативно влияет на производительность сайта. Важно регулярно удалять такие заказы, чтобы поддерживать чистоту и порядок.

Как настроить автоматическое удаление неоплаченных заказов

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

Пошаговое решение

  1. Определите, через сколько часов после создания заказа он считается устаревшим и подлежит удалению.
  2. Создайте функцию, которая найдет и удалит все заказы со статусом pending старше этого времени.
  3. Запланируйте выполнение функции с помощью WP-Cron, например, раз в час.

Пример кода для functions.php

function wporder_delete_old_pending_orders() {
    $hours = 24; // Время в часах, после которого заказы удаляются
    $date_threshold = date('Y-m-d H:i:s', strtotime("-{$hours} hours"));

    $args = array(
        'status' => 'pending',
        'date_created' => '<' . $date_threshold,
        'limit' => -1,
        'return' => 'ids',
    );

    $orders = wc_get_orders($args);

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

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

// Хук на выполнение
add_action('wporder_hourly_pending_orders_cleanup', 'wporder_delete_old_pending_orders');

Как проверить, что удаление работает

  • Создайте тестовый заказ со статусом pending и датой создания более 24 часов назад (можно вручную изменить дату в базе или через REST API).
  • Запустите событие WP-Cron вручную с помощью плагина WP Crontrol или вызовом do_action('wporder_hourly_pending_orders_cleanup');.
  • Проверьте, что заказ удалился из списка заказов WooCommerce.

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

  • Заказы не удаляются: Проверьте, что событие WP-Cron запланировано и срабатывает. Можно использовать плагин WP Crontrol для мониторинга событий.
  • Заказы с другими статусами удаляются: В параметрах запроса убедитесь, что указан только статус pending.
  • Функция не удаляет заказы с пользовательскими статусами: Добавьте их в аргумент 'status' массива $args, например array('pending', 'on-hold').
  • Ошибки при удалении: Убедитесь, что вызов $order->delete(true); внутри цикла корректно работает, и что нет конфликтов с плагинами, блокирующими удаление.

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

  • Запускайте удаление не чаще, чем раз в час, чтобы не создавать нагрузку.
  • Перед удалением заказов можно добавить резервное копирование базы или логи удалений для восстановления в случае ошибки.
  • Ограничьте удаление только заказами старше реального срока, например 24-48 часов, чтобы не удалять актуальные заказы.
  • Если на сайте большой объем заказов, оптимизируйте запросы или делайте удаление пакетами по 50-100 заказов, чтобы избежать таймаутов.

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

МетодПлюсыМинусыРекомендации
Ручное удаление через админкуПростота, контрольТрудозатратно, риск забытьПодходит для сайтов с малым количеством заказов
Плагин автоматического удаленияУдобство, настройка без кодаЗависимость от сторонних плагинов, нагрузкаИспользовать проверенные плагины с хорошими отзывами
Кастомный код с WP-Cron (как в статье)Полный контроль, легковесностьТребует навыков, проверка WP-CronОптимальный для разработчиков и крупных проектов
Как создать автоматическую отправку email при изменении статьи в WordPress
19.12.2025
Как автоматизировать изменение статьи на основе статистики просмотров в WordPress
30.03.2026
Как добавить и автоматизировать собственные статусы заказов в WooCommerce
24.03.2026
Автоматическое создание и отправка push-уведомлений при создании нового заказа в WordPress
15.03.2026
Автоматизация сохранения черновиков WordPress: лучшие практики и примеры кода
18.11.2025