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

Диагностика проблемы: почему нужно удалять неоплаченные заказы

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

Если не удалять такие заказы, это влияет на производительность сайта и затрудняет управление заказами.

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

Общий подход

Для автоматизации удаления заказов без плагинов мы используем WP-Cron — встроенную систему планировщика задач WordPress. Скрипт будет запускаться, искать неоплаченные заказы старше 48 часов и удалять их программно.

Шаги реализации

  1. Создаем функцию, которая проверяет и удаляет заказы с нужным статусом и возрастом.
  2. Регистрируем собственное событие WP-Cron, которое будет запускать эту функцию каждые 12 часов.
  3. Добавляем код в файл functions.php вашей темы или в кастомный плагин.

Пример кода

<?php
// Функция удаления неоплаченных заказов старше 48 часов
function wc_delete_unpaid_orders_after_48h() {
    $args = array(
        'limit'        => -1, // получить все
        'status'       => array('pending', 'failed'), // неоплаченные статусы
        'date_created' => '<' . ( new WC_DateTime( '-48 hours' ) )->format( 'Y-m-d H:i:s' ),
        'return'       => 'ids',
    );

    $orders = wc_get_orders( $args );

    if ( empty( $orders ) ) {
        return;
    }

    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true ); // принудительное удаление
    }
}

// Регистрируем событие для WP-Cron
function wc_schedule_delete_unpaid_orders() {
    if ( ! wp_next_scheduled( 'wc_delete_unpaid_orders_cron_hook' ) ) {
        wp_schedule_event( time(), 'twicedaily', 'wc_delete_unpaid_orders_cron_hook' );
    }
}
add_action( 'wp', 'wc_schedule_delete_unpaid_orders' );

// Запускаем функцию при срабатывании крон-хука
add_action( 'wc_delete_unpaid_orders_cron_hook', 'wc_delete_unpaid_orders_after_48h' );

// Очистка при деактивации темы/плагина
function wc_clear_scheduled_delete_unpaid_orders() {
    $timestamp = wp_next_scheduled( 'wc_delete_unpaid_orders_cron_hook' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wc_delete_unpaid_orders_cron_hook' );
    }
}
register_deactivation_hook( __FILE__, 'wc_clear_scheduled_delete_unpaid_orders' );
?>

Как проверить, что решение работает

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

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

  • WP-Cron не срабатывает автоматически. Механизм WP-Cron зависит от посещаемости сайта. Для стабильной работы настройте системный cron на сервере, который вызывает wp-cron.php каждые 15 минут.
  • Заказы не удаляются, хотя должны. Убедитесь, что статусы в запросе совпадают с теми, что используются в вашем магазине. Стандартные статусы неоплаченных заказов: pending, failed. Если у вас кастомные, добавьте их в массив.
  • Удаленные заказы возвращаются после обновления WooCommerce. Используйте wp_delete_post($order_id, true) для принудительного удаления без помещения в корзину.

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

  • Всегда делайте бэкап базы перед внедрением автоматического удаления заказов.
  • Ограничивайте удаление заказов только теми статусами, которые действительно требуют очистки.
  • Для крупных магазинов с тысячами заказов используйте пагинацию в запросах, чтобы не перегружать сервер.
  • Для отладки используйте запись логов с помощью error_log() или специализированных плагинов.

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

МетодПлюсыМинусы
Плагин (например, WooCommerce Order Cleanup)Простота настройки, готовые функцииДополнительная нагрузка, возможны конфликты
Код с WP-Cron (как в статье)Контроль над процессом, без плагиновНеобходимы навыки программирования, зависит от WP-Cron
Ручное удаление через админкуПростота, не требует кодаНеавтоматично, занимает время
WooCommerce: автоматическое удаление неоплаченных заказов через cron и код
02.07.2026
WooCommerce: автоматическое изменение статусов заказов при оплате через Webhook
05.07.2026
Оптимизация базы данных WordPress: удаляем избыточные данные и ускоряем сайт
26.11.2025
WordPress автоматическое удаление спама в комментариях: эффективные решения
30.11.2025
Как полностью удалить emoji из WordPress для оптимизации скорости
12.12.2025