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

Проблема зависших платежей в WooCommerce: диагностика

Зависшие платежи — это заказы, которые были созданы, но так и не завершились успешной оплатой. Они могут оставаться в статусах pending, failed или on-hold длительное время, что приводит к:

  • загромождению базы данных;
  • искажению статистики продаж;
  • ошибкам в учёте и отчётности;
  • потере возможности повторного оформления.

Чтобы убедиться в наличии таких заказов, выполните запрос к базе данных или используйте SQL-плагин (например, WP-DBManager):

SELECT ID, post_status, post_date 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 7 DAY);

Этот запрос покажет все заказы в статусах ожидания, неуспешных или на проверке старше 7 дней.

Автоматизация удаления зависших платежей: пошаговое решение

Шаг 1. Добавляем PHP-скрипт для удаления старых заказов

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

function wppay_delete_stale_orders() {
    if ( ! current_user_can('manage_woocommerce') ) {
        return;
    }

    $args = array(
        'limit'        => -1,
        'status'       => array('pending', 'failed', 'on-hold'),
        'date_created' => '<' . ( new WC_DateTime() )->modify('-7 days')->format('Y-m-d H:i:s'),
    );

    $orders = wc_get_orders( $args );

    foreach ( $orders as $order ) {
        wp_delete_post( $order->get_id(), true );
    }
}

// Запускаем раз в сутки через WP-Cron
add_action('wppay_daily_cleanup', 'wppay_delete_stale_orders');

function wppay_schedule_cleanup() {
    if ( ! wp_next_scheduled('wppay_daily_cleanup') ) {
        wp_schedule_event( time(), 'daily', 'wppay_daily_cleanup' );
    }
}
add_action( 'wp', 'wppay_schedule_cleanup' );

Этот код удалит все заказы в статусах pending, failed и on-hold, созданные более 7 дней назад. Использование WP-Cron обеспечит ежедневный запуск очистки.

Шаг 2. Ручной запуск и проверка

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

add_action('admin_init', function() {
    if ( isset($_GET['wppay_cleanup']) ) {
        wppay_delete_stale_orders();
        wp_die('Удаление зависших заказов выполнено');
    }
});

Перейдите по URL https://ваш-сайт.ru/wp-admin/?wppay_cleanup=1 чтобы запустить очистку вручную.

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

  • Повторите SQL-запрос из раздела диагностики — количество заказов в статусах pending, failed, on-hold старше 7 дней должно быть равно нулю.
  • В админке WooCommerce в разделе «Заказы» исчезнут старые незавершённые платежи.
  • Проверьте логи сервера и ошибок WooCommerce на предмет сбоев.

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

  • Заказы не удаляются: проверьте, что функция wc_get_orders корректно возвращает объекты, и что у пользователя есть права manage_woocommerce.
  • Удаляются нужные заказы: убедитесь, что фильтр даты и статусов задан правильно, чтобы не затронуть активные платежи.
  • WP-Cron не работает: на некоторых хостингах WP-Cron требует внешних вызовов, настройте реальный cron или используйте плагин для управления задачами.

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

  • Для больших магазинов с тысячами заказов лучше делать удаление партиями (например, по 50 заказов за запуск), чтобы не перегружать сервер.
  • Регулярно делайте бэкапы базы данных перед массовыми операциями удаления.
  • Для дополнительной безопасности добавьте логирование удалённых заказов в отдельный файл или таблицу.
  • Если используете сторонние плагины для платежей, убедитесь, что их статусы совпадают с WooCommerce, чтобы не удалять нужные данные.

Сравнение методов удаления зависших платежей

МетодОписаниеПлюсыМинусы
Ручное удаление через админкуУдаление заказов вручную через интерфейс WooCommerceПросто, без кодаТрудоёмко, риск пропуска
Автоматизация через WP-Cron + кодПериодический автоматический запуск PHP-скриптаАвтоматизация, чистка базы без вмешательстваЗависит от работы WP-Cron, требует тестирования
Использование плагинов очисткиПлагины типа WP Sweep, Clearfy ProУдобный интерфейс, дополнительные функции оптимизацииМогут удалять лишнее, зависят от поддержки
Обновление платежных плагинов в WordPress без потери данных
02.01.2026
WooCommerce: как настроить обязательную 3D Secure авторизацию платежей
14.07.2026
Оптимизация платежных запросов и уход за базой данных в WordPress
07.03.2026
Как изменить платежную форму в WordPress с помощью хуков
29.12.2025
Как автоматизировать управление возвратами в WordPress
22.02.2026