Что такое забытые корзины и почему их стоит удалять
Забытые корзины — это товары, добавленные в корзину покупателем, который не завершил оформление заказа и не вернулся в магазин. Они занимают место в базе данных WooCommerce, особенно если в магазине много посетителей и корзин. Это приводит к росту размера базы данных, замедлению запросов и потенциальным конфликтам с плагинами кэширования и оптимизации.
Автоматическое удаление таких корзин помогает поддерживать производительность сайта, экономит место в базе данных и упрощает работу с заказами.
Диагностика проблемы: как понять, что корзины накапливаются
WooCommerce хранит данные о корзинах в таблице wp_woocommerce_sessions (или с префиксом вашей базы). Чтобы проверить количество сохранённых сессий (в том числе и корзин), выполните SQL-запрос:
SELECT COUNT(*) FROM wp_woocommerce_sessions;Если количество записей превышает несколько тысяч и при этом вы не используете регулярную очистку, это повод задуматься об автоматизации удаления.
Также в админке WooCommerce можно посмотреть активные сессии через плагины мониторинга сессий или через инструменты отладки.
Пошаговое решение: как настроить автоматическое удаление старых корзин
1. Использование WP-Cron для удаления сессий старше N дней
WooCommerce не предоставляет встроенного механизма для очистки старых сессий, поэтому пишем свой код, который будет удалять записи из таблицы сессий, старше определённого времени.
Добавьте следующий код в файл functions.php вашей дочерней темы или в отдельный плагин:
function wpfactory_delete_old_woocommerce_sessions() {
global $wpdb;
$days = 7; // удалять сессии старше 7 дней
$table = $wpdb->prefix . 'woocommerce_sessions';
// Получаем временную метку для сравнения
$time_limit = time() - ( $days * DAY_IN_SECONDS );
// Формируем SQL-запрос на удаление старых сессий
$deleted = $wpdb->query(
$wpdb->prepare(
"DELETE FROM $table WHERE session_expiry < %d",
$time_limit
)
);
if ( false === $deleted ) {
error_log('Ошибка при удалении старых сессий WooCommerce');
}
}
// Регистрируем крон-задачу
add_action('wpfactory_daily_cleanup', 'wpfactory_delete_old_woocommerce_sessions');
// Планируем запуск, если ещё не запланировано
if ( ! wp_next_scheduled( 'wpfactory_daily_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpfactory_daily_cleanup' );
}Этот код создаёт ежедневную задачу, которая удаляет сессии старше 7 дней. Вы можете изменить значение переменной $days на своё усмотрение.
2. Альтернативный вариант: плагин Clearfy Pro
Если вы используете плагин Clearfy Pro, в его функционале есть возможности по очистке базы данных WooCommerce, включая удаление старых сессий и корзин. Это удобный способ без кода, но с некоторыми ограничениями по гибкости и частоте очистки.
Проверка результата после внедрения
Чтобы убедиться, что автоматическая очистка работает:
- Запустите задачу вручную через WP-CLI:
wp cron event run wpfactory_daily_cleanup - Проверьте количество записей в таблице
wp_woocommerce_sessionsдо и после выполнения крона. - Просмотрите логи PHP на наличие ошибок.
- Наблюдайте за производительностью сайта и временем отклика при работе с корзинами.
Частые ошибки и как их исправить
- Ошибка доступа к базе данных: проверьте, что пользователь базы данных имеет права на DELETE в таблице
woocommerce_sessions. - Крон-задача не запускается: убедитесь, что WP-Cron активен и посещаемость сайта достаточна для его срабатывания. Для теста используйте WP-CLI.
- Удаление происходит, но сессии не уменьшаются: проверьте, что поле
session_expiryдействительно содержит Unix timestamp. В некоторых версиях WooCommerce может отличаться формат хранения. - Потеря данных пользователей: не удаляйте сессии слишком рано, чтобы не потерять данные активных корзин. Минимум 3 дня — рекомендованное значение.
Практические советы по безопасности и производительности
- Не запускайте очистку чаще, чем раз в сутки — частые запросы DELETE могут нагрузить базу.
- Всегда делайте резервную копию базы данных перед внедрением автоматизации удаления.
- Используйте индекс по полю
session_expiryдля ускорения удаления (обычно индекс создаётся автоматически). - Для больших магазинов с высокими нагрузками рассмотрите использование внешнего cron-сервиса или WP-CLI для запуска задач.
- Если вы используете кэширование на уровне объекта или страницы, убедитесь, что удаление сессий корректно учитывается, чтобы не было рассинхронизации корзины.
Сравнение вариантов очистки корзин
| Метод | Плюсы | Минусы |
|---|---|---|
| Собственный код с WP-Cron | Полный контроль, бесплатно, легко адаптировать | Требует навыков, риск ошибок при неправильной настройке |
| Плагин Clearfy Pro | Удобный интерфейс, комплексное решение по оптимизации | Платный, ограниченная гибкость, зависит от обновлений плагина |
| Ручное удаление через SQL | Моментальный эффект | Риск ошибочных удалений, требует доступа к базе, не автоматизировано |