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

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

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

Для диагностики проблемы:

  • Перейдите в админку WooCommerce → Заказы и отфильтруйте по статусу pending или failed.
  • Оцените количество таких заказов и дату их создания.
  • Проверьте, не блокируют ли эти заказы автоматические процессы или интеграции (например, платежные шлюзы).

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

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

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

function wpb_delete_old_unpaid_orders() {
    $days = 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. Зарегистрируйте Cron-задачу для регулярного запуска

Добавьте код для регистрации задачи при инициализации WordPress:

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

add_action('wpb_delete_unpaid_orders_hook', 'wpb_delete_old_unpaid_orders');

3. Отключение Cron (при необходимости)

Если на вашем сервере не срабатывает WP-Cron корректно, настройте системный Cron и отключите WP-Cron, добавив в wp-config.php:

define('DISABLE_WP_CRON', true);

Затем добавьте Cron-задачу в crontab, например, для запуска каждые 6 часов:

0 */6 * * * wget -q -O - https://your-site.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

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

  • Перейдите в раздел Заказы WooCommerce и убедитесь, что заказы со статусом pending и failed, которым более 7 дней, удалены.
  • Для теста создайте заказ со статусом pending, измените дату создания в базе данных (например, через phpMyAdmin) на более старую дату, и запустите Cron вручную:
do_action('wpb_delete_unpaid_orders_hook');
  • Проверьте, что заказ удалился.
  • Отслеживайте логи сервера на наличие ошибок во время выполнения задачи.

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

  • Заказы не удаляются: убедитесь, что функция wp_delete_post вызывается с параметром true для полного удаления, а не в корзину.
    Проверьте права пользователя и доступ к базе.
  • Cron-задача не запускается: проверьте, включен ли WP-Cron, а также корректность URL вызова через системный Cron.
    Используйте плагин WP Crontrol для отладки.
  • Удаляются не те заказы: внимательно проверьте параметры фильтрации в wc_get_orders, особенно статус и дату создания.

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

  • Удаляйте заказы только с проверкой возраста (например, старше 7 дней), чтобы избежать удаления активных заказов.
  • Запускайте удаление в ночное время или в периоды низкой нагрузки.
  • Используйте плагин Clearfy Pro (https://wpshop.ru/plugins/clearfy?utm_source=wpbloger.ru&utm_medium=article&utm_campaign=woocommerce-avtomaticheskoe-udaleniye-neoplatyonnykh-zakazov) для оптимизации базы данных и очистки неиспользуемых данных.
  • Всегда делайте резервные копии перед внедрением автоматического удаления.
WooCommerce: настройка автоматического возврата денег после отмены заказа
23.07.2026
Как отключить автоматическое выполнение PHP кода в WordPress
09.02.2026
Удаление неиспользуемых метаданных в WordPress для оптимизации базы данных
17.11.2025
WooCommerce: как автоматически удалять товары и варианты с нулевым остатком
15.05.2026
WooCommerce: использование хука woocommerce_order_status_changed для автоматизации процессов
25.06.2026