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

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

На интернет-магазинах на WooCommerce часто накапливаются неоплаченные заказы, которые занимают место в базе данных и могут влиять на статистику и отчёты. Это происходит из-за пользователей, которые не завершили оплату, либо из-за технических сбоев платежных шлюзов. Без регулярной очистки таких заказов база растёт, а администраторы тратят время на ручное удаление.

Для диагностики проблемы выполните следующие шаги:

  • Перейдите в WooCommerce → Заказы и установите фильтр по статусу Ожидает оплаты или on-hold.
  • Отметьте количество заказов с этими статусами и проанализируйте их возраст: за сколько дней они остаются неоплаченными.
  • Проверьте логи платежных систем на предмет сбоев, которые могли привести к незавершённым транзакциям.

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

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

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

    $days = 3; // Количество дней ожидания оплаты
    $date = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

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

    $orders = wc_get_orders( $args );

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

add_action( 'woocommerce_scheduled_delete_old_pending_orders', 'wpcourse_delete_old_pending_orders' );

// Запускаем очистку раз в сутки
if ( ! wp_next_scheduled( 'woocommerce_scheduled_delete_old_pending_orders' ) ) {
    wp_schedule_event( time(), 'daily', 'woocommerce_scheduled_delete_old_pending_orders' );
}

Этот код создаёт ежедневное событие, которое удаляет все неоплаченные заказы старше 3 дней. При необходимости можно изменить количество дней, настроив переменную $days.

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

Чтобы проверить, что автоматическое удаление работает корректно:

  1. Создайте тестовый заказ с статусом pending вручную или через фронтенд.
  2. Измените дату создания заказа в базе данных (например, через phpMyAdmin), чтобы она была старше установленного периода в 3 дня.
  3. Запустите вручную действие wp-cron, вызвав URL https://ваш_сайт/wp-cron.php или через консоль WP-CLI командой wp cron event run woocommerce_scheduled_delete_old_pending_orders.
  4. Проверьте, что заказ исчез из списка заказов.

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

  • Отсутствие запуска wp-cron: если на сайте отключён wp-cron или низкая активность, задача может не запускаться. Проверьте настройки cron и при необходимости настройте системный cron на запуск wp-cron.php.
  • Неверный статус заказа: в WooCommerce бывают разные статусы неоплаченных заказов (pending, on-hold). Убедитесь, что в коде указан именно статус, который нужно удалять.
  • Права доступа: функция current_user_can('manage_woocommerce') ограничивает выполнение. Если запуск идёт по cron, можно убрать проверку или использовать другой способ проверки.
  • Удаление заказов с важной информацией: будьте осторожны, чтобы не удалять заказы, которые могут быть в процессе оплаты или возврата. Лучше выставлять небольшое количество дней и внимательно следить за логами.

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

  • Перед внедрением автоматического удаления сделайте резервную копию базы данных.
  • Для больших магазинов с тысячами заказов используйте пагинацию в запросах, чтобы не перегружать базу.
  • Логируйте удалённые заказы в отдельный файл для аудита и восстановления, если нужно.
  • Регулярно проверяйте логи сайта и WooCommerce на предмет ошибок при удалении.

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

МетодПлюсыМинусыКомпромисс
Код на PHP с WP-CronПолный контроль, без плагиновТребует знаний, возможны ошибкиИспользовать готовые решения с настройками
Плагины очистки WooCommerceПростота установки, интерфейсМогут грузить сайт, лишний кодИспользовать на небольших сайтах
Ручное удаление через админкуПростота, безопасностьТрудозатратно, не автоматичноИспользовать для единичных случаев

Дополнительный код: логирование удалённых заказов

function wpcourse_delete_old_pending_orders() {
    $days = 3;
    $date = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );

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

    $orders = wc_get_orders( $args );
    $log_file = WP_CONTENT_DIR . '/deleted_orders.log';

    foreach ( $orders as $order_id ) {
        $order = wc_get_order( $order_id );
        $data = sprintf( "%s - Удалён заказ #%d, сумма: %s\n", date('Y-m-d H:i:s'), $order_id, $order->get_total() );
        file_put_contents( $log_file, $data, FILE_APPEND );
        wp_delete_post( $order_id, true );
    }
}
Как создать автоматический редирект в WordPress без плагинов
09.03.2026
Почему в WooCommerce не отправляются письма о заказах и как это исправить
17.04.2026
Как удалить из изображений metadata EXIF в WordPress для ускорения сайта
16.12.2025
Как использовать REST API для создания нестандартных запросов в WordPress
06.03.2026
Как избежать конфликтов между WooCommerce и кастомными плагинами: диагностика и решение
17.06.2026

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас