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

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

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

Как определить заказы, подлежащие удалению

Для удаления подходят заказы со статусами pending, failed или on-hold, которые не были оплачены в течение заданного периода (например, 48 часов). Проверять нужно дату создания заказа — поле post_date в таблице wp_posts.

Пример SQL-запроса для диагностики

SELECT ID, post_date, post_status FROM wp_posts
WHERE post_type = 'shop_order'
AND post_status IN ('wc-pending', 'wc-failed', 'wc-on-hold')
AND post_date < DATE_SUB(NOW(), INTERVAL 48 HOUR);

Этот запрос покажет заказы, которые можно безопасно удалить.

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

Добавим функцию в functions.php вашей темы или создадим отдельный плагин для удаления старых неоплаченных заказов.

1. Функция удаления заказов старше 48 часов

function wplike_delete_old_unpaid_orders() {
    $args = array(
        'post_type'      => 'shop_order',
        'post_status'    => array('wc-pending', 'wc-failed', 'wc-on-hold'),
        'date_query'     => array(
            array(
                'column'    => 'post_date',
                'before'    => '48 hours ago',
            ),
        ),
        'posts_per_page' => -1,
        'fields'         => 'ids',
    );

    $orders = get_posts($args);

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

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

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

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

add_action('wplike_daily_order_cleanup', 'wplike_delete_old_unpaid_orders');

Этот код добавит ежедневный запуск функции удаления.

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

  • Выполните SQL-запрос из раздела «Диагностика» и убедитесь, что заказы старше 48 часов с нужными статусами отсутствуют.
  • В админке WooCommerce проверьте список заказов — старые неоплаченные должны пропасть.
  • Для теста можно временно уменьшить интервал в функции (например, заменить 48 часов на 1 час) и создать тестовый заказ с нужным статусом.

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

  • Заказы не удаляются: Проверьте, запущен ли WP-Cron. На некоторых хостингах он не запускается автоматически — используйте системный cron для обращения к wp-cron.php.
  • Удаляются оплаченные заказы: Убедитесь, что в post_status указаны только неоплаченные статусы (wc-pending, wc-failed, wc-on-hold).
  • Удаление не происходит из-за кеширования: Очистите кеш плагинов и браузера, убедитесь, что код правильно добавлен и активен.

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

  • Всегда делайте резервную копию базы данных перед внедрением автоматического удаления.
  • Для крупных магазинов с тысячами заказов разбивайте удаление на порции, чтобы не перегружать сервер.
  • Используйте транзакции и логи для отслеживания удалённых заказов, если это критично.
  • Если WP-Cron не работает стабильно, настройте системный cron на вызов wp-cron.php каждые 15 минут.
  • Для дополнительной безопасности можно добавить проверку nonce или прав пользователя, если запускать функцию вручную из админки.

Сравнение способов удаления заказов: код vs плагины

СпособПреимуществаНедостаткиРекомендации
Код в functions.php / плагинеПолный контроль, отсутствие сторонних зависимостей, возможность кастомизацииТребует навыков PHP, риск ошибок без тестированияДля опытных разработчиков и уникальных сценариев
Плагины (например, WP Cleanup, Advanced Cron Manager)Удобство интерфейса, готовые решенияДополнительная нагрузка, возможные конфликты, ограничения настроекДля быстро запускаемых решений без кастомизации
WooCommerce: как избежать проблем с редкой оплатой и автоматическим отключением заказов
27.04.2026
Как установить автоматические редиректы в WordPress по условиям
07.04.2026
Как использовать WPRemark для эффективного управления отзывами в WordPress
11.01.2026
WooCommerce: автоматическое отключение заказов при отмене платежа
16.06.2026
Как добавить автоматический отзыв на посты WordPress
16.02.2026