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

Проблема: накопление неоплаченных заказов в WooCommerce

Магазины на WooCommerce часто сталкиваются с проблемой, когда неоплаченные заказы остаются в системе навсегда. Это затрудняет управление заказами, увеличивает нагрузку на базу данных и мешает аналитике продаж. Решение — автоматическое удаление заказов без оплаты через заданный промежуток времени.

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

Чтобы убедиться, что проблема действительно существует, можно посмотреть список заказов с статусом pending или failed в админке WooCommerce (WooCommerce → Заказы). Если таких заказов много и они не проходят в оплату, нужно настроить автоматическое удаление.

Проверка количества неоплаченных заказов через SQL

SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-failed');

Высокое число — сигнал к автоматизации очистки.

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

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

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

function wpfix_delete_unpaid_orders() {
    $days_to_keep = 7; // Время в днях, после которого заказы удаляются
    $date_threshold = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));

    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-pending', 'wc-failed'),
        'date_query'     => array(
            'before' => $date_threshold,
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $orders = get_posts($args);

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

2. Настройка WP-Cron для регулярного запуска

Добавьте планировщик, чтобы функция запускалась ежедневно:

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

add_action('wpfix_daily_order_cleanup', 'wpfix_delete_unpaid_orders');

3. Очистка расписания при деактивации плагина/темы

function wpfix_clear_order_cleanup_schedule() {
    $timestamp = wp_next_scheduled('wpfix_daily_order_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpfix_daily_order_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wpfix_clear_order_cleanup_schedule');

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

  • Подождите 24 часа после внедрения кода, чтобы cron выполнился.
  • Проверьте таблицу заказов в админке WooCommerce — заказы со статусом pending и failed старше 7 дней должны исчезнуть.
  • Для мгновенной проверки можно вручную вызвать функцию из консоли WP-CLI: wp eval 'wpfix_delete_unpaid_orders();'

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

  • WP-Cron не срабатывает: Если сайт низко посещаемый, cron может не запускаться. Решение — настроить системный cron на сервере, вызывающий WP-Cron с помощью команды wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron.
  • Заказы не удаляются: Проверьте права пользователя, от имени которого запускается cron, и параметры функции wp_delete_post. Также убедитесь, что статус заказов действительно wc-pending или wc-failed.
  • Удаляются не те заказы: Проверьте правильность условия в date_query и массив статусов.

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

  • Удаление заказов — необратимая операция. Перед включением автоматического удаления создайте резервную копию базы данных.
  • Для крупных магазинов с тысячами заказов ограничьте обработку заказов за один запуск, чтобы избежать таймаутов, например, добавив параметр posts_per_page => 100 и использовать пагинацию.
  • Для контроля процесса логируйте удалённые ID заказов в отдельный файл или в системный лог с помощью error_log().
  • Настройте уведомления администратора о выполнении задачи — например, отправку email с результатами удаления.

Альтернативные решения: плагин vs кастомный код

ВариантПреимуществаНедостатки
Кастомный кодПолный контроль, минимум нагрузки, не зависит от сторонних обновленийТребуется знание PHP и WordPress API, ответственность за поддержку
Плагин (например, WooCommerce Order Cleanup)Готовое решение, простой интерфейс, настройки из админкиМожет быть избыточным, нагрузка, риск конфликтов с другими плагинами
Как успешно использовать WPRemark для улучшения комментариев в WordPress
16.12.2025
Как использовать WPCommunity для создания внутреннего интранета на WordPress
10.02.2026
Как использовать REST API в WordPress для автоматизации задач
30.11.2025
WooCommerce: автоматическое удаление товаров из корзины и отключение оплаты по времени
12.07.2026
Как использовать WPCommunity для создания порталов и интранетов на WordPress
08.03.2026