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

Что такое заброшенные корзины в WooCommerce и почему их нужно удалять

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

Диагностика проблемы: как определить, есть ли заброшенные корзины

В WooCommerce корзины хранятся в таблице wp_woocommerce_sessions (по умолчанию префикс wp_ может отличаться). Для проверки количества активных сессий с неоформленными корзинами выполните SQL-запрос:

SELECT COUNT(*) FROM wp_woocommerce_sessions;

Если количество записей большое — скорее всего, есть множество заброшенных корзин. Также можно смотреть на дату последнего обновления сессий, чтобы понять, какие корзины давно не обновлялись.

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

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

В этом примере удаляем сессии, которые не обновлялись дольше 7 дней:

function wc_delete_old_sessions() {
    global $wpdb;
    $session_lifetime = 7 * DAY_IN_SECONDS; // 7 дней
    $threshold = time() - $session_lifetime;

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

    $deleted = $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM $table WHERE session_expiry < %d",
            $threshold
        )
    );

    if ( false !== $deleted ) {
        error_log("Удалено заброшенных корзин: $deleted");
    }
}

2. Запускаем функцию по расписанию с помощью WP-Cron

Добавляем событие при инициализации плагина или темы:

function wc_schedule_delete_old_sessions() {
    if ( ! wp_next_scheduled( 'wc_delete_old_sessions_hook' ) ) {
        wp_schedule_event( time(), 'daily', 'wc_delete_old_sessions_hook' );
    }
}
add_action( 'wp', 'wc_schedule_delete_old_sessions' );
add_action( 'wc_delete_old_sessions_hook', 'wc_delete_old_sessions' );

3. Очистка при деактивации

Чтобы избежать мусора в расписании, удаляем крон-событие при деактивации темы или плагина:

function wc_clear_delete_old_sessions_schedule() {
    $timestamp = wp_next_scheduled( 'wc_delete_old_sessions_hook' );
    if ( $timestamp ) {
        wp_unschedule_event( $timestamp, 'wc_delete_old_sessions_hook' );
    }
}
register_deactivation_hook( __FILE__, 'wc_clear_delete_old_sessions_schedule' );

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

  • Через неделю после первичного запуска проверьте таблицу wp_woocommerce_sessions — старые записи должны быть удалены.
  • В логах PHP (error_log) появится сообщение о количестве удаленных корзин.
  • Мониторьте производительность базы данных и размер таблицы woocommerce_sessions.

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

  • Неверный префикс таблицы: Используйте $wpdb->prefix, а не жесткий wp_.
  • Функция не запускается: Убедитесь, что событие Cron зарегистрировано и выполняется. Используйте плагин WP Crontrol для диагностики.
  • Удаляются активные корзины: Проверьте правильность условия удаления по времени — удаляйте только старые сессии.
  • Крон не срабатывает на локальном сервере: Для запуска Cron вручную вызовите wp cron event run --due-now через WP-CLI или загрузите страницу сайта с активированным wp-cron.

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

  • Для больших сайтов с тысячами сессий лучше выполнять удаление пакетно, чтобы избежать таймаута запросов.
  • Регулярно оптимизируйте таблицу woocommerce_sessions, используя SQL-команду OPTIMIZE TABLE wp_woocommerce_sessions;.
  • Ограничьте время жизни сессий в настройках WooCommerce, если нужно сократить период хранения корзин.
  • Используйте WPScan или подобные инструменты для проверки безопасности базы данных после внедрения автоматизации.

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

МетодПреимуществаНедостаткиКомпромисс
Плагин для очистки сессийПростота установки, готовые функцииЗависимость от стороннего кода, возможные конфликтыИспользовать проверенные плагины с активной поддержкой
Собственный код с WP-CronКонтроль, легкая кастомизация, минимальные зависимостиНужно следить за правильностью кода и расписаниемРегулярное тестирование и журналирование
Ручное удаление через SQLМаксимальная скорость и контрольРиск ошибок, требует доступа к базе и знаний SQLИспользовать для экстренной очистки, не для регулярной работы
Как удалить неиспользуемые метаданные товаров WooCommerce с помощью кода
26.05.2026
Как настроить отправку писем WordPress через SMTP: плагины и примеры кода
21.02.2026
Как создать собственный плагин для автоматического удаления спама в комментариях WordPress
18.11.2025
Оптимизация загрузки плагинов WordPress для повышения производительности сайта
29.11.2025
WooCommerce: как почистить метаданные товаров и оптимизировать базу данных
09.06.2026