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

|

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

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

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

Как определить неактивные корзины и заказы в WooCommerce

В WooCommerce корзина пользователя временно хранится в сессии и куках, а также в базе данных в виде заказов со статусом pending или failed. Заказы, которые не были оплачены или подтверждены, считаются неактивными.

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

SELECT ID, post_date, post_status FROM wp_posts WHERE post_type = 'shop_order' AND post_status IN ('wc-pending', 'wc-failed') ORDER BY post_date ASC;

Это позволит увидеть, сколько заказов в статусах ожидания или ошибки, и когда они были созданы.

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

1. Удаление устаревших заказов через WP Cron

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

function wc_delete_old_pending_orders() {
    global $wpdb;
    $days = 7;
    $date = date('Y-m-d H:i:s', strtotime("-{$days} days"));

    // Получаем ID заказов со статусом wc-pending старше $days
    $orders = $wpdb->get_col( $wpdb->prepare(
        "SELECT ID FROM {$wpdb->posts} WHERE post_type = 'shop_order' AND post_status = 'wc-pending' AND post_date < %s",
        $date
    ) );

    foreach ( $orders as $order_id ) {
        wp_delete_post( $order_id, true ); // true — удаление без перемещения в корзину
    }
}

// Регистрируем cron задачу
add_action( 'wc_cleanup_old_orders_hook', 'wc_delete_old_pending_orders' );

// Запускаем cron при инициализации, если не зарегистрирован
function wc_schedule_old_orders_cleanup() {
    if ( ! wp_next_scheduled( 'wc_cleanup_old_orders_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'wc_cleanup_old_orders_hook' );
    }
}
add_action( 'wp', 'wc_schedule_old_orders_cleanup' );

2. Очистка сессий и корзин WooCommerce

WooCommerce хранит данные корзин в сессиях, которые также со временем нужно очищать. Для этого используйте встроенную функцию WooCommerce wc_session_cleanup(). Она вызывается при активации плагина, но для регулярной очистки можно добавить аналогичный cron:

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

add_action( 'wc_cleanup_sessions_hook', function() {
    if ( class_exists( 'WC_Session_Handler' ) ) {
        WC()->session->cleanup_sessions();
    }
} );

Однако вызов WC()->session->cleanup_sessions() напрямую не всегда срабатывает, т.к. WC()->session инициализируется только при работе фронтенда. Для надежности лучше использовать WP CLI или плагины, например, Clearfy Pro, который умеет чистить базу.

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

do_action('wc_cleanup_old_orders_hook');
do_action('wc_cleanup_sessions_hook');

и посмотрите, как изменится база данных.

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

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

Сравнение вариантов реализации очистки заказов и корзин

МетодПлюсыМинусыПример использования
Код в functions.php с WP Cron Контроль, гибкость, бесплатно Зависит от WP Cron, требует кодинга Пример кода выше
WP CLI команда Надежность, можно запускать вручную Требует SSH доступа wp wc cleanup sessions (плагин или кастомная команда)
Плагин (например, Clearfy Pro) Автоматизация, удобный интерфейс, дополнительные функции Платный, зависит от стороннего кода Clearfy Pro
Как правильно создать каскадные типовые шаблоны WordPress для сложных сайтов
03.01.2026
Как добавить поддержку Gutenberg-блоков в своей теме WordPress
26.01.2026
Как разрешить или запретить копирование текста в WordPress: практические методы
08.04.2026
Как добавить поддержку видеоплеера HTML5 в WordPress с примерами и плагинами
05.04.2026
Как автоматически удалять неактивных пользователей WordPress
23.03.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше