Автоматическое удаление старых корзин (сессий) в WooCommerce без плагинов

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

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

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

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

SELECT COUNT(*) as count, MIN(session_expiry) as oldest_session FROM wp_woocommerce_sessions;

Если count очень большой и oldest_session — дата давно прошедшая, стоит очистить старые данные.

Где хранятся корзины WooCommerce

WooCommerce хранит сессии корзин в таблице wp_woocommerce_sessions. В этой таблице есть поля:

  • session_key — уникальный ключ сессии;
  • session_value — сериализованные данные корзины;
  • session_expiry — время истечения сессии (timestamp);

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

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

function wptemp_delete_old_woocommerce_sessions() {
    global $wpdb;
    $threshold = time() - 7 * DAY_IN_SECONDS; // 7 дней назад
    $table = $wpdb->prefix . 'woocommerce_sessions';

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

    if (false === $deleted) {
        error_log('Ошибка при удалении старых сессий WooCommerce');
    } else {
        error_log("Удалено старых сессий WooCommerce: $deleted");
    }
}

// Запускаем очистку раз в сутки через WP-Cron
add_action('wptemp_daily_cleanup', 'wptemp_delete_old_woocommerce_sessions');

// Регистрируем событие при активации темы/плагина
function wptemp_schedule_daily_cleanup() {
    if (!wp_next_scheduled('wptemp_daily_cleanup')) {
        wp_schedule_event(time(), 'daily', 'wptemp_daily_cleanup');
    }
}
add_action('wp', 'wptemp_schedule_daily_cleanup');

Этот код создает ежедневное задание, которое удалит все сессии, у которых время истечения меньше текущего времени минус 7 дней.

Как проверить, что функция сработала

  • Проверьте в базе данных количество записей в wp_woocommerce_sessions до и после выполнения задания.
  • В файле wp-content/debug.log (если включен WP_DEBUG_LOG) появится запись об удалении.
  • Можно вручную вызвать функцию через wp shell или временно добавить вызов wptemp_delete_old_woocommerce_sessions(); в functions.php для теста.

Частые ошибки и их решения

  • Ошибка: функция не вызывается ежедневно
    — Проверьте, что WP-Cron работает (например, посетите сайт).
  • Ошибка: нет прав на удаление
    — Убедитесь, что база данных подключена корректно и пользователь MySQL имеет права на DELETE.
  • Ошибка в SQL-запросе
    — Используйте $wpdb->prepare для безопасности, как в примере.

Альтернативные способы и сравнение

МетодПреимуществаНедостатки
Ручное удаление через SQLПростота, моментальный эффектТребуется доступ к базе, риск ошибочного удаления
Автоматизация через WP-Cron + кодАвтоматически поддерживает чистоту, гибкая настройкаЗависит от работы WP-Cron, требует навыков кодинга
Плагины очистки сессийУдобство, визуальный интерфейсДополнительные ресурсы, возможные конфликты

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

  • Регулярно проверяйте размер таблицы wp_woocommerce_sessions, особенно при большом трафике.
  • Не снижайте время хранения сессий слишком сильно, чтобы не ухудшить UX (корзина не должна пропадать слишком быстро).
  • Для высокой нагрузки рассмотрите системный Cron вместо WP-Cron для надежности.
  • Используйте error_log или свой лог для мониторинга работы скрипта.
Оптимизация памяти и управление использованием памяти в WordPress
08.04.2026
Как использовать WP-Cron для отложенных задач в WordPress без системного Cron
04.04.2026
Как настроить фильтры в WP REST API для сложных запросов
11.04.2026
WooCommerce: автоматическое удаление пустых корзин (сессий) без плагинов
14.07.2026
WooCommerce: как автоматически удалять старые корзины (сессии) без плагинов
26.06.2026