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

|

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

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

Типичные признаки проблемы:

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

1. Удаление старых заказов с неподтверждённым статусом

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

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

    $old_orders = get_posts($args);

    if (!empty($old_orders)) {
        foreach ($old_orders as $order_id) {
            wp_delete_post($order_id, true);
        }
    }
}
add_action('wp_scheduled_delete', 'wppremium_delete_old_pending_orders');

Этот код привязывает функцию к событию wp_scheduled_delete — стандартному крону WordPress, который по умолчанию запускается раз в сутки.

2. Автоматическая чистка корзины (сессий WooCommerce)

WooCommerce хранит корзины пользователей в сессиях, которые могут оставаться в базе долгое время. Чтобы автоматически очищать старые сессии, добавим следующий код:

function wppremium_cleanup_woocommerce_sessions() {
    global $wpdb;
    $expiration = time() - (7 * DAY_IN_SECONDS); // 7 дней назад

    $sessions_table = $wpdb->prefix . 'woocommerce_sessions';

    $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM $sessions_table WHERE session_expiry < %d",
            $expiration
        )
    );
}
add_action('wp_scheduled_delete', 'wppremium_cleanup_woocommerce_sessions');

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

Для оценки работы решения выполните следующие шаги:

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

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

Сравнение методов очистки заказов и сессий WooCommerce

МетодОписаниеПлюсыМинусы
Удаление заказов через WP CronАвтоматическое удаление заказов с определённым статусом старше X днейПростая реализация, нет сторонних плагиновЗависит от работы WP Cron, возможны задержки
Очистка сессий через SQL-запросУдаление старых сессий из таблицы woocommerce_sessionsУменьшение размера базы данных, повышение скорости загрузки сессийНе работает с кастомными плагинами сессий
Плагины для очистки WooCommerceСпециализированные решения для удаления старых заказов и сессийГрафический интерфейс, дополнительные функцииНагрузка на сайт, возможные конфликты, платные версии
Как добавить поддержку WebP в WordPress без плагинов
02.02.2026
Как массово изменить или удалить атрибуты alt и title у изображений в WordPress
19.03.2026
Как сделать динамические шорткоды WordPress: примеры и практические решения
13.11.2025
Как удалить пустые категории в WordPress без плагинов
30.01.2026
Как добавить собственные типы записей (Custom Post Types) в WordPress
22.11.2025
×

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

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

пишет статьи

готовит SEO

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

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