WPExperts

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

Что значит автоматическое отключение заказов при отсутствии оплаты и зачем это нужно

В WooCommerce часто возникает ситуация, когда клиенты создают заказы, но не оплачивают их. Такие заказы могут засорять базу, создавать нагрузку и вводить в заблуждение магазины с автоматической логистикой. Автоматическое отключение (смена статуса, например, на "Отменён" или "Отложен") помогает поддерживать актуальность и чистоту списка заказов.

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

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

Также полезно изучить логи платежных шлюзов и статистику по оплатам, чтобы исключить технические сбои.

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

1. Используем WP Cron для периодической проверки

Добавим PHP-код, который будет запускать задачу каждый час и менять статус заказов, которые в ожидании оплаты более 24 часов.

function wpexperts_schedule_order_status_check() {
    if ( ! wp_next_scheduled( 'wpexperts_check_pending_orders' ) ) {
        wp_schedule_event( time(), 'hourly', 'wpexperts_check_pending_orders' );
    }
}
add_action( 'wp', 'wpexperts_schedule_order_status_check' );

// Основная функция обработки
function wpexperts_check_pending_orders() {
    $args = array(
        'status' => 'pending',
        'date_created' => '<' . ( time() - DAY_IN_SECONDS ), // старше 24 часов
        'limit' => -1
    );
    $orders = wc_get_orders( $args );
    foreach ( $orders as $order ) {
        $order->update_status( 'cancelled', 'Автоматическая отмена заказа из-за отсутствия оплаты более 24 часов' );
    }
}
add_action( 'wpexperts_check_pending_orders', 'wpexperts_check_pending_orders' );

2. Регулируем время ожидания и статус, на который меняется заказ

Если 24 часа слишком мало или много, замените DAY_IN_SECONDS на желаемый интервал, например, 48 * HOUR_IN_SECONDS для 48 часов. Статус cancelled можно заменить на failed или любой другой, зарегистрированный в WooCommerce.

3. Отключение задачи при деактивации плагина или темы

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

Проверка результата: как убедиться, что автоматическое отключение работает

  • Создайте тестовый заказ на вашем сайте и не оплачивайте его.
  • Подождите установленный интервал (например, 24 часа) либо уменьшите время в коде для теста.
  • Проверьте статус заказа в админке — он должен измениться на "Отменён" или выбранный вами.
  • Проверьте логи WooCommerce и системные логи ошибок для подтверждения запуска задачи WP Cron.

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

  • Задача WP Cron не срабатывает: на некоторых хостингах WP Cron зависит от посещений сайта. Включите системный cron или используйте плагин WP Crontrol для диагностики и запуска задач вручную.
  • Неверный статус заказа: статус должен быть зарегистрирован в WooCommerce. Используйте стандартные статусы или добавляйте кастомные через хуки.
  • Производительность при большом количестве заказов: если заказов много, делайте выборку с пагинацией или ставьте лимиты, чтобы избежать тайм-аутов.
  • Отсутствие уведомлений клиентам: по умолчанию смена статуса не уведомляет клиентов. Добавьте отправку email при смене статуса, если нужно.

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

  • Не меняйте статус заказов молниеносно — дайте клиенту время оплатить (лучше 24-48 часов).
  • Используйте wp_schedule_event с интервалами не чаще часа, чтобы не нагружать сервер.
  • Добавьте логирование изменений статусов в отдельный файл для аудита.
  • Если используете кеширование, убедитесь, что админка WooCommerce не кешируется, чтобы видеть актуальные статусы.

Сравнение вариантов реализации автоматического отключения заказов

МетодПлюсыМинусы
WP Cron с кастомным кодомПолный контроль, бесплатно, легко настраиваетсяЗависит от трафика, требует навыков PHP
Плагины автоматизации (например, WooCommerce Order Status Control)Простота установки, готовый интерфейсМогут грузить сайт, платные функции
Внешние cron через серверные скриптыНадежно, не зависит от WP CronТребует доступа к серверу и настройки
×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙