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

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

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

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

1. Определение статусов заказов для удаления

Обычно неоплаченными считаются заказы со статусом pending (ожидание оплаты) и failed (неудачная оплата). Именно их следует удалять спустя определённое время.

2. Создание функции для удаления старых заказов

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

function wpid_delete_old_unpaid_orders() {
    $days_to_keep = 7; // Время хранения в днях
    $date_limit = date('Y-m-d H:i:s', strtotime('-' . $days_to_keep . ' days'));

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

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        wp_trash_post($order_id); // Перемещаем в корзину, чтобы можно было восстановить
    }
}

3. Регистрация WP-Cron задачи для автоматизации

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

// Регистрируем событие при активации темы/плагина
function wpid_schedule_order_cleanup() {
    if (!wp_next_scheduled('wpid_daily_order_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wpid_daily_order_cleanup');
    }
}
add_action('wp', 'wpid_schedule_order_cleanup');

// Обработчик события
add_action('wpid_daily_order_cleanup', 'wpid_delete_old_unpaid_orders');

// Очистка при деактивации
function wpid_unschedule_order_cleanup() {
    $timestamp = wp_next_scheduled('wpid_daily_order_cleanup');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'wpid_daily_order_cleanup');
    }
}
register_deactivation_hook(__FILE__, 'wpid_unschedule_order_cleanup');

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

  • Дождитесь 24 часа после установки кода, затем проверьте, что неоплаченные заказы старше 7 дней перемещены в корзину WooCommerce.
  • Для оперативной проверки вызовите функцию вручную в админке через wp shell или добавьте временный вызов:
    add_action('admin_init', 'wpid_delete_old_unpaid_orders');
    и обновите любую административную страницу, потом удалите этот вызов.
  • Проверьте таблицу wp_posts на наличие записей с типом shop_order и статусом trash.

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

  • Крон не запускается: Убедитесь, что на сайте есть трафик, т.к. WP-Cron запускается только при посещении. Для теста запустите вручную через WP-CLI wp cron event run --due-now.
  • Заказы не удаляются: Проверьте, что статусы заказов совпадают с указанными в фильтре. Для других статусов добавьте их в массив 'status'.
  • Удаление происходит слишком рано или поздно: Отрегулируйте значение $days_to_keep в функции по вашим требованиям.
  • Функция вызывает фатальные ошибки: Проверьте, что WooCommerce активен и функция wc_get_orders доступна.

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

  • Используйте функцию wp_trash_post вместо wp_delete_post для безопасного удаления с возможностью восстановления.
  • Для магазинов с очень большим количеством заказов делайте удаление партиями с ограничением 'limit', чтобы не перегружать базу.
  • Регулярно очищайте корзину WooCommerce, так как удалённые заказы остаются там и занимают место.
  • Для повышения надёжности используйте системный cron хостинга вместо WP-Cron, если доступно.

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

МетодПлюсыМинусыПример
WP-Cron (код) Автоматизация, гибкость, нет дополнительных плагинов Зависит от посещаемости, возможны задержки Код из статьи
Плагины для очистки заказов Простота настройки, GUI Дополнительная нагрузка, возможные конфликты Advanced Order Cleanup (пример)
Системный cron + WP-CLI Стабильность, не зависит от трафика Требует доступа к серверу и навыков wp cron event run --due-now
WooCommerce: как автоматически удалять неоплаченные заказы через заданное время
28.07.2026
WooCommerce: как автоматически удалять неоплаченные заказы через заданное время
04.08.2026
WooCommerce: как отключить кэширование страницы корзины и контролировать обновления
10.07.2026
WooCommerce: как автоматически удалять пустые варианты товаров
21.07.2026
Как удалить или изменить URL страницы в WordPress без потери SEO
05.01.2026