Диагностика проблемы заброшенных корзин в WooCommerce
Заброшенные корзины — частая проблема интернет-магазинов на WooCommerce. Пользователи добавляют товары в корзину, но не завершают покупку. Это приводит к завышенной статистике активных корзин, ухудшает аналитику и нагружает базу данных. Особенно заметно при большом трафике и ассортименте.
Основная задача — автоматическое выявление и удаление таких корзин, чтобы не держать лишние данные и не мешать работе системы.
Как определить, что корзина заброшена?
В WooCommerce корзина хранится в пользовательской сессии и в базе данных (таблица wp_woocommerce_sessions). Заброшенной считается корзина, в которой пользователь не совершил оплату и не возвращался в течение определённого времени (например, 24 часа).
Для диагностики можно проверить содержимое таблицы сессий и дату последнего обновления:
SELECT session_key, session_value, session_expiry FROM wp_woocommerce_sessions ORDER BY session_expiry ASC;Если в таблице много записей с устаревшими session_expiry, значит корзины не очищаются.
Пошаговое решение: автоматическое удаление заброшенных корзин
1. Создаем WP-Cron задачу для удаления старых сессий
WooCommerce не удаляет корзины автоматически по времени, но мы можем запланировать задачу, которая будет вычищать устаревшие записи из таблицы wp_woocommerce_sessions.
add_action('wp_loaded', function() {
if (!wp_next_scheduled('wc_cleanup_abandoned_carts')) {
wp_schedule_event(time(), 'hourly', 'wc_cleanup_abandoned_carts');
}
});
add_action('wc_cleanup_abandoned_carts', function() {
global $wpdb;
$expiration_time = time(); // текущее время UNIX
$table = $wpdb->prefix . 'woocommerce_sessions';
$deleted = $wpdb->query($wpdb->prepare(
"DELETE FROM $table WHERE session_expiry < %d",
$expiration_time
));
});Этот код создаёт ежечасное событие, которое удаляет все сессии, срок действия которых истек (то есть корзины, которые не обновлялись).
2. Настраиваем время истечения сессий WooCommerce
По умолчанию срок действия сессии WooCommerce — 48 часов. Можно уменьшить этот промежуток, чтобы корзины быстрее удалялись.
add_filter('wc_session_expiring', function($seconds) {
return 3600 * 12; // 12 часов
});
add_filter('wc_session_expiration', function($seconds) {
return 3600 * 24; // 24 часа
});Первый фильтр — время предупреждения об окончании сессии, второй — её полное истечение.
Проверка результата после внедрения
- Через базу данных проверить таблицу
wp_woocommerce_sessions: записи с устаревшимsession_expiryдолжны удаляться. - Создать тестовую корзину, не оформлять заказ, подождать больше 24 часов, проверить — корзина исчезла.
- Мониторить нагрузку и количество записей в таблице сессий до и после внедрения, чтобы убедиться в уменьшении заброшенных корзин.
Частые ошибки и как их исправить
- Нет срабатывания WP-Cron: На некоторых хостингах WP-Cron работает только при заходе на сайт. Для гарантированной работы настроить системный cron с вызовом
wget -q -O - https://example.com/wp-cron.php?doing_wp_cron. - Удаление активных сессий: Не стоит уменьшать время жизни сессий слишком сильно, иначе активные пользователи потеряют корзину.
- Неправильный префикс таблиц: В коде используйте
$wpdb->prefix, чтобы избежать ошибок с префиксами баз данных. - Повторное создание cron задачи: Проверяйте наличие задачи через
wp_next_scheduled, чтобы не создавать дубли.
Практические советы по безопасности и производительности
- Удаление старых сессий уменьшает нагрузку на базу данных и помогает избежать замедления запросов к таблице
wp_woocommerce_sessions. - Регулярно проверяйте логи сервера на ошибки cron для своевременного исправления.
- Если магазин большой — рассмотрите использование внешних систем для сбора статистики и аналитики по заброшенным корзинам, чтобы не перегружать базу.
- Перед внесением изменений сделайте бэкап базы.
Сравнение способов очистки заброшенных корзин WooCommerce
| Метод | Описание | Плюсы | Минусы |
|---|---|---|---|
| Код с WP-Cron | Удаление устаревших сессий через собственный cron | Легко кастомизировать, бесплатно, без плагинов | Зависит от работы WP-Cron, нужно контролировать |
| Плагин (например, Abandoned Cart Lite) | Готовые решения с настройками и интеграциями | Простота установки, дополнительные функции | Может нагружать сайт, лишний код |
| Внешние сервисы | Отслеживание через сторонние платформы | Углубленная аналитика, email-уведомления | Платно, зависит от сторонних сервисов |