Что такое забытые корзины в WooCommerce и почему их нужно удалять
Забытые корзины — это товары, которые пользователи добавили в корзину, но не оформили покупку. Такие записи остаются в базе данных WooCommerce, занимая место и потенциально замедляя работу сайта. Автоматическое удаление забытых корзин помогает поддерживать базу в чистоте, снижать нагрузку на сервер и повышать производительность магазина.
Диагностика проблемы с забытыми корзинами
Чтобы убедиться, что на вашем сайте накопились забытые корзины, выполните следующие шаги:
- Проверьте таблицу
wp_woocommerce_sessionsв базе данных — она хранит данные сессий, включая корзины. - Обратите внимание на количество записей и дату их последнего обновления — старые сессии обычно соответствуют забытым корзинам.
- Используйте плагин WooCommerce Cart Reports или подобные для визуального контроля активности корзин.
Пошаговое решение: удаление забытых корзин с помощью PHP-кода
WooCommerce хранит данные корзин в таблице wp_woocommerce_sessions. Для удаления забытых корзин нужно удалить сессии, которые не обновлялись определённое время (например, 24 часа). Ниже приведён пример кода, который можно добавить в файл functions.php вашей темы или создать небольшой плагин для автоматизации задачи.
function wpfactory_delete_expired_woocommerce_sessions() {
global $wpdb;
$expiration = 24 * 60 * 60; // 24 часа в секундах
$time_limit = time() - $expiration;
// Таблица сессий WooCommerce
$table = $wpdb->prefix . 'woocommerce_sessions';
// Удаляем сессии, которые не обновлялись более 24 часов
$result = $wpdb->query(
$wpdb->prepare(
"DELETE FROM $table WHERE session_expiry < %d",
$time_limit
)
);
if ($result !== false) {
error_log("Удалено забытых корзин: " . $result);
}
}
// Запускаем очистку при запуске Cron задачи
add_action('wpfactory_daily_cleanup', 'wpfactory_delete_expired_woocommerce_sessions');
// Регистрируем Cron задачу, если её ещё нет
if (!wp_next_scheduled('wpfactory_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpfactory_daily_cleanup');
}Этот код создаёт ежедневную Cron-задачу, которая удаляет все сессии старше 24 часов. Можно настроить интервал и время удаления, изменив переменную $expiration.
Как вручную запустить очистку для теста
Чтобы проверить работу функции без ожидания Cron, вызовите её напрямую:
wpfactory_delete_expired_woocommerce_sessions();Проверка результата после внедрения
Для подтверждения успешного удаления забытых корзин выполните:
- Проверьте количество записей в таблице
wp_woocommerce_sessionsдо и после запуска функции. - Включите логирование ошибок PHP и просмотрите файл
error_logна предмет сообщений о количестве удалённых записей. - Используйте инструменты администрирования базы данных (phpMyAdmin, Adminer) для контроля изменений.
Частые ошибки и как их исправить
- Ошибка: Cron задача не запускается. Проверьте, активен ли WP Cron на сайте. Для этого временно добавьте код
wp_cron()в файлwp-config.phpили настройте системную Cron задачу на вызовwp-cron.php. - Удаляются не только корзины, но и пользовательские сессии. Убедитесь, что удаляются только сессии с корзинами, а не сессии пользователей. Можно ограничить удаление, проверяя содержимое сессии, но это усложнит запрос.
- Функция вызывает ошибки базы данных. Проверьте права пользователя базы данных и корректность префикса таблицы
$wpdb->prefix.
Практические советы по безопасности и производительности
- Всегда делайте резервную копию базы данных перед запуском подобных операций.
- Используйте WP-Cron с осторожностью — при большом трафике лучше настроить системный Cron для вызова
wp-cron.php. - Если база большая, разбивайте удаление на части (например, по 1000 записей), чтобы избежать блокировок MySQL.
- Отключайте логирование ошибок в продакшн-среде после отладки, чтобы не перегружать диск.
Сравнение способов удаления забытых корзин
| Метод | Плюсы | Минусы |
|---|---|---|
| Плагин (например, WooCommerce Cart Cleanup) | Удобство, интерфейс, настройка без кода | Дополнительная нагрузка, зависимости от обновлений плагина |
| Код в functions.php + WP-Cron | Лёгкость, контроль, минимум зависимостей | Требует знаний, настройка Cron, риски при ошибках в коде |
| Ручное удаление через SQL | Максимальная скорость, точечное воздействие | Риск ошибок, требует доступа к базе, нет автоматизации |