Оставленные корзины — одна из главных проблем интернет-магазинов на WordPress, особенно при использовании WooCommerce. Если покупатель положил товары в корзину, но не завершил покупку, эти данные могут сохраняться в базе, занимая место и усложняя аналитику. В этой статье подробно рассмотрим, как автоматизировать очистку таких корзин, чтобы поддерживать базу данных в порядке и оптимизировать работу сайта.
Что такое оставленные корзины и почему их нужно удалять
Оставленная корзина — это ситуация, когда пользователь добавил товары в корзину, но не оформил заказ и не оплатил его. WooCommerce по умолчанию хранит сессию корзины пользователя, что позволяет вернуть товары при повторном посещении, но если пользователь не возвращается, такие данные становятся мусором.
Проблемы от накопления оставленных корзин:
- Загромождение базы данных. Много неактивных сессий замедляют запросы.
- Ошибки аналитики. Невозможно получить точные данные о корзинах и заказах.
- Негативное влияние на производительность. Особенно на больших магазинах.
Автоматическое удаление старых корзин помогает поддерживать чистоту базы и ускорять работу сайта.
Как WooCommerce хранит данные корзины
WooCommerce использует сессии для хранения данных корзины. Сессии могут храниться в базе данных или в файлах, в зависимости от настроек. В базе они представлены в таблице wp_woocommerce_sessions с ключом session_key и сериализованными данными корзины.
Обычно сессии имеют время жизни около 48 часов, но эта настройка не всегда срабатывает корректно, особенно при большом трафике.
Для полной очистки нужно программно удалять старые записи сессий, которые неактивны длительное время.
Автоматизация удаления оставленных корзин через WP-Cron
Создание функции удаления старых сессий
Реализуем функцию wpcontent_delete_old_woocommerce_sessions(), которая будет удалять сессии старше 48 часов.
function wpcontent_delete_old_woocommerce_sessions() {
global $wpdb;
$table = $wpdb->prefix . 'woocommerce_sessions';
$expiration = time() - 48 * HOUR_IN_SECONDS;
// Форматируем время в формат MySQL (timestamp)
$expiration_datetime = date('Y-m-d H:i:s', $expiration);
// Удаляем сессии, где session_expiry меньше текущего времени минус 48 часов
$deleted = $wpdb->query(
$wpdb->prepare(
"DELETE FROM $table WHERE session_expiry < %s",
$expiration_datetime
)
);
return $deleted;
}Функция подключается к базе и удаляет записи в таблице wp_woocommerce_sessions с истекшим временем действия.
Регистрация планировщика задачи WP-Cron
Чтобы функция выполнялась регулярно, добавим хук и запланируем событие раз в сутки.
function wpcontent_schedule_delete_old_sessions() {
if ( ! wp_next_scheduled( 'wpcontent_daily_delete_sessions' ) ) {
wp_schedule_event( time(), 'daily', 'wpcontent_daily_delete_sessions' );
}
}
add_action( 'wp', 'wpcontent_schedule_delete_old_sessions' );
add_action( 'wpcontent_daily_delete_sessions', 'wpcontent_delete_old_woocommerce_sessions' );Этот код проверит, запланировано ли событие, и если нет — создаст ежедневное выполнение очистки.
Дополнительные инструменты и плагины для работы с оставленными корзинами
Если вы не хотите писать код, можно воспользоваться готовыми решениями:
- Abandoned Cart Pro — мощный плагин для управления и автоматизации работы с оставленными корзинами, включая напоминания покупателям.
- Clearfy Pro — плагин для оптимизации WordPress, в том числе умеет очищать базу от мусорных данных.
Использование плагинов позволяет не только удалять старые корзины, но и восстанавливать продажи с помощью email-рассылок и аналитики.
Как проверить работу автоматической очистки
После добавления кода в файл functions.php или в собственный плагин, проверьте:
- Есть ли таблица
wp_woocommerce_sessionsв базе (префикс может отличаться). - Дата и время сессий в ней — чтобы убедиться, что старые записи удаляются.
- Запуск WP-Cron: в админке или через плагин WP Crontrol.
Для отладки можно вызвать функцию вручную в консоли или добавить временный вызов.
Рекомендации по безопасности и производительности
При работе с базой важно тщательно проверять запросы и использовать подготовленные выражения, чтобы избежать SQL-инъекций. В нашем примере используется $wpdb->prepare(), что соответствует стандартам безопасности WordPress.
Также не стоит запускать очистку слишком часто, чтобы не создавать лишнюю нагрузку. Оптимальный интервал — раз в сутки или даже раз в несколько дней, в зависимости от объема трафика и размера базы.
Если сайт большой, рассмотрите возможность использования WP CLI для запуска скриптов вне веб-запросов.
Итог
Автоматизация удаления оставленных корзин — важный элемент поддержки интернет-магазина на WordPress. Пример с использованием WP-Cron и прямого запроса к таблице сессий показывает, как просто и эффективно можно решать эту задачу без сторонних плагинов.
Для расширенного функционала можно использовать специализированные плагины с интеграцией email-рассылок и аналитики, такие как Abandoned Cart Pro.