WooCommerce: как автоматически отключить отложенные заказы через код

|

Что такое отложенные заказы в WooCommerce и зачем их отключать

Отложенные заказы — это заказы, которые были созданы, но клиент не завершил оплату или оформление. Они занимают место в базе, могут влиять на аналитику и создавать путаницу в админке. Автоматическое отключение или удаление таких заказов помогает поддерживать базу данных в чистоте и облегчает управление магазином.

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

Для начала нужно понять, есть ли в вашем магазине отложенные заказы и как долго они висят без активности.

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

SELECT ID, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-on-hold') ORDER BY post_date ASC;

Это позволит увидеть, какие заказы висят дольше всего.

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

Реализуем через хук WordPress планировщик cron, который будет запускаться ежедневно и менять статус старых отложенных заказов на отменённые.

Добавляем cron-задачу в functions.php вашей темы или в собственный плагин

if ( ! wp_next_scheduled( 'wc_auto_cancel_pending_orders' ) ) {
    wp_schedule_event( time(), 'daily', 'wc_auto_cancel_pending_orders' );
}

add_action( 'wc_auto_cancel_pending_orders', 'wc_auto_cancel_pending_orders_function' );

function wc_auto_cancel_pending_orders_function() {
    $days_to_cancel = 3; // Кол-во дней, после которых заказ отменяется
    $date = date( 'Y-m-d H:i:s', strtotime( "-{$days_to_cancel} days" ) );

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

    $orders = wc_get_orders( $args );

    foreach ( $orders as $order ) {
        $order->update_status( 'cancelled', 'Автоматическая отмена старого отложенного заказа' );
    }
}

Объяснение

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

Чтобы проверить, работает ли скрипт:

  1. Создайте тестовый заказ с статусом pending.
  2. Измените дату создания заказа в базе данных на дату более трёх дней назад (через phpMyAdmin или WP-CLI).
  3. Запустите cron вручную с помощью WP-CLI: wp cron event run wc_auto_cancel_pending_orders.
  4. Проверьте, что статус заказа изменился на cancelled в админке WooCommerce.

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

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

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

СпособПлюсыМинусыРекомендации
Код с wp_schedule_eventГибко, без сторонних плагинов, можно кастомизироватьНужны базовые знания PHP, возможны ошибки при неправильной настройкеЛучше для разработчиков и кастомных решений
Плагины автоматизации заказов (например, WooCommerce Cancel Abandoned Order)Простая настройка, интерфейс в админкеМожет грузить сайт, зависит от обновлений плагинаПодходит новичкам и для быстрого внедрения
Ручное удаление через SQLБыстро для разовых задачРиск потери данных, требует доступа к базе, не автоматичноИспользовать с осторожностью и только для миграций
WooCommerce: как автоматически удалять отзывы о товарах через заданный период
30.04.2026
Как удалить авторизованного пользователя без пароля в WordPress
12.02.2026
Создаем собственный виджет в WordPress на PHP: подробное руководство
05.11.2025
Как удалить или скрыть авторизацию для определённых пользователей в WordPress
26.03.2026
Как автоматизировать удаление спам-комментариев в WordPress
31.12.2025
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше