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

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

В WooCommerce неоплаченные заказы (статус pending или failed) накапливаются в базе и со временем замедляют работу магазина. Особенно это актуально для магазинов с большим числом заказов и высокой конверсией отказов. Автоматическое удаление таких заказов помогает оптимизировать базу данных и улучшить производительность.

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

1. Создаём функцию для удаления старых неоплаченных заказов

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

function wplist_delete_old_unpaid_orders() {
    $days = 7; // Удалять заказы старше 7 дней
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

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

    $orders = wc_get_orders($args);

    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true); // Полное удаление заказа
    }
}

2. Запускаем функцию по расписанию с помощью WP-Cron

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

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

add_action('wplist_delete_unpaid_orders_cron', 'wplist_delete_old_unpaid_orders');

3. Проверка работы WP-Cron

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

// wplist_delete_old_unpaid_orders(); // Раскомментируйте для теста

Или использовать плагин WP Crontrol для управления и проверки задач cron.

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

  • В админке WooCommerce зайдите в Заказы и отфильтруйте по статусам pending и failed. Заказы старше 7 дней должны исчезнуть.
  • Проверьте таблицу wp_posts в базе данных: удалённые заказы должны отсутствовать.
  • При использовании WP Crontrol убедитесь, что задача wplist_delete_unpaid_orders_cron есть и выполняется.

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

  • Функция не запускается автоматически: проверьте, активен ли WP-Cron на сайте (хостинг не блокирует запросы). Можно настроить системный cron для вызова wp-cron.php.
  • Удаляются не те статусы заказов: убедитесь, что в массиве 'status' указаны только нужные статусы (pending и failed).
  • Удаление заказов не полное: функция wp_delete_post($order_id, true) удаляет заказ без перемещения в корзину. Если указать false, заказ будет в корзине и не освобождает ресурсы.
  • Потеря данных или удаление нужных заказов: настройте период хранения (переменная $days) с запасом, чтобы не удалять заказы, которые могут быть оплачены позднее.

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

  • Запускайте удаление заказов в ночное время, когда нагрузка на сервер минимальна.
  • Перед удалением можно добавить логи и уведомления для контроля работы функции.
  • Для больших магазинов с тысячами заказов лучше делать удаление порциями, чтобы не перегружать сервер. Например, добавьте параметр limit в wc_get_orders() и запускайте функцию несколько раз.
  • Перед внедрением сделайте резервную копию базы данных.

Сравнение методов удаления заказов

МетодПреимуществаНедостаткиРекомендации
Удаление вручную из админкиПросто, не требует кодаТрудозатратно, неэффективно при большом количествеИспользовать для единичных случаев
Плагин (например, WP Bulk Delete)Гибко, с интерфейсомДополнительная нагрузка, иногда платные функцииПодходит для администраторов без навыков программирования
Самописный код + WP-CronАвтоматизация, контроль, минимальная нагрузкаТребует навыков PHP и тестированияЛучший вариант для разработчиков и больших магазинов
Как удалить проблемные виджеты в WordPress без ошибок и потери данных
23.03.2026
Как добавить собственные поля в WordPress: пошаговое руководство
14.11.2025
WooCommerce: как автоматически удалять неактивные купоны
03.08.2026
Как удалить все старые метаданные в WordPress
09.02.2026
WooCommerce: Автоматическое удаление неоплаченных заказов — подробное руководство
12.06.2026