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

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

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

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

  • Перейдите в WooCommerce → Заказы и посмотрите количество заказов со статусом «Ожидает оплаты» или «В обработке», которые не изменялись более недели.
  • Проверьте таблицу wp_woocommerce_sessions (если используется сессия WooCommerce) на предмет большого количества записей с устаревшими временными метками.
  • Используйте запросы SQL для анализа количества заказов в статусах, которые не менялись длительное время:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-on-hold') AND post_date < DATE_SUB(NOW(), INTERVAL 7 DAY);

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

1. Удаление старых заказов с неоконченной оплатой через WP-Cron

Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин. Он будет ежедневно удалять заказы со статусом «Ожидает оплаты» старше 7 дней.

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

    $orders = get_posts($args);
    foreach ($orders as $order_id) {
        wp_delete_post($order_id, true);
    }
}

// Регистрируем задачу в WP-Cron
if (! wp_next_scheduled('wptest_daily_delete_old_orders')) {
    wp_schedule_event(time(), 'daily', 'wptest_daily_delete_old_orders');
}
add_action('wptest_daily_delete_old_orders', 'wptest_delete_old_pending_orders');

2. Очистка устаревших сессий WooCommerce (корзин)

WooCommerce хранит данные сессий в таблице wp_woocommerce_sessions. По умолчанию сессии очищаются через 48 часов, но можно настроить период и добавить дополнительную очистку.

function wptest_custom_clean_woocommerce_sessions() {
    global $wpdb;
    $expiration = 48 * HOUR_IN_SECONDS; // 48 часов
    $time_limit = time() - $expiration;
    $sessions_table = $wpdb->prefix . 'woocommerce_sessions';

    $deleted = $wpdb->query( $wpdb->prepare(
        "DELETE FROM $sessions_table WHERE session_expiry < %d",
        $time_limit
    ));
    return $deleted;
}

// Планируем очистку сессий каждые 12 часов
if (! wp_next_scheduled('wptest_clean_woocommerce_sessions')) {
    wp_schedule_event(time(), 'twicedaily', 'wptest_clean_woocommerce_sessions');
}
add_action('wptest_clean_woocommerce_sessions', 'wptest_custom_clean_woocommerce_sessions');

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

  • Подождите 1-2 дня после внедрения кода, затем проверьте количество заказов в статусах wc-pending и wc-on-hold. Их должно стать меньше, особенно если были старые заказы.
  • Проверьте таблицу wp_woocommerce_sessions — количество записей должно уменьшиться после запуска задачи очистки.
  • Для проверки запуска WP-Cron используйте плагин WP Crontrol или вызовите вручную функцию через админку.

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

  • Заказы не удаляются: Проверьте, что WP-Cron работает. Локально WP-Cron может не запускаться автоматически, используйте внешние сервисы или запускайте вручную.
  • Удаляются нужные заказы: Проверьте условие в date_query, чтобы не удалять заказы, которые могут быть актуальны. Лучше увеличить период, если сомневаетесь.
  • Ошибки сессий WooCommerce: Убедитесь, что таблица wp_woocommerce_sessions существует и что пользователь базы данных имеет права на удаление записей.

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

  • Перед внедрением кода сделайте резервную копию базы данных.
  • Не используйте слишком короткие интервалы удаления — это может привести к потере данных клиентов.
  • Планируйте задачи WP-Cron в периоды низкой нагрузки, чтобы снизить влияние на производительность сайта.
  • Рассмотрите использование плагина Clearfy Pro (https://wpshop.ru/plugins/clearfy?source=wptest.ru&medium=article&campaign=woocommerce-avtomaticheskoe-udaleniye-zabytyh-zakazov-i-korziny) для дополнительной оптимизации и управления кэшами.

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

МетодПлюсыМинусыПример
Код с WP-CronГибкость, контроль, не требует сторонних плагиновНужна базовая разработка, может не работать на локалках без внешнего триггераПриведённый выше код
Плагины для очисткиПростота, интерфейс, дополнительные функцииМогут влиять на производительность, меньше контроляWP-Optimize, Advanced Database Cleaner
Ручная очисткаНикакого кода, полный контрольТрудозатратно, риск ошибокSQL-запросы через phpMyAdmin
Как добавить автоматическое удаление спама в комментариях WordPress
08.01.2026
Как добавить кастомный виджет в WordPress с поддержкой настроек и стилей
11.02.2026
Как удалить старые вариации товара в WooCommerce
19.04.2026
Как автоматизировать удаление старого контента в WordPress без плагинов
14.03.2026
Как использовать pre_get_posts для автоматизации выборки записей в WordPress
05.05.2026