Диагностика проблемы с неактивными корзинами в WooCommerce
В WooCommerce корзины создаются для каждого посетителя, но не все из них завершаются покупкой. Неактивные корзины (т.е. те, что давно не обновлялись и не завершились заказом) занимают место в базе данных, замедляют запросы и увеличивают размер таблиц. Особенно это заметно на больших магазинах с тысячами пользователей.
Для диагностики откройте таблицу wp_woocommerce_sessions в базе данных и выполните запрос:
SELECT COUNT(*) AS total_carts, MAX(session_expiry) FROM wp_woocommerce_sessions;Если количество записей превышает тысячи и максимальная дата session_expiry сильно устарела, значит корзины не очищаются вовремя и нужна автоматизация очистки.
Почему стандартный WooCommerce не очищает корзины?
WooCommerce хранит сессии корзин в таблице wp_woocommerce_sessions и удаляет их по истечении срока действия сессии (по умолчанию 48 часов). Однако на практике многие сессии остаются из-за:
- Пользователь не закрывал браузер или не завершил сессию.
- Отсутствие механизма периодической очистки устаревших сессий.
- Кэширование, мешающее правильному определению сессии.
Пошаговое решение: автоматическое удаление неактивных корзин
1. Создаем WP-Cron задачу для регулярной очистки
Добавьте в functions.php вашей темы или в кастомный плагин следующий код, который будет запускать очистку каждые 12 часов:
if ( ! wp_next_scheduled( 'premiumwp_clear_inactive_wc_carts' ) ) {
wp_schedule_event( time(), 'twicedaily', 'premiumwp_clear_inactive_wc_carts' );
}
add_action( 'premiumwp_clear_inactive_wc_carts', 'premiumwp_delete_expired_wc_sessions' );
function premiumwp_delete_expired_wc_sessions() {
global $wpdb;
$table = $wpdb->prefix . 'woocommerce_sessions';
$now = time();
$deleted = $wpdb->query( $wpdb->prepare(
"DELETE FROM $table WHERE session_expiry < %d",
$now
) );
if ( false === $deleted ) {
error_log('Ошибка при удалении устаревших сессий WooCommerce');
}
}2. Проверяем корректность удаления сессий
После запуска задачи проверяйте таблицу wp_woocommerce_sessions в базе данных. Количество записей должно уменьшаться примерно через сутки после добавления кода.
Для ручного запуска функции используйте WP-CLI или временно вызовите функцию в админке (например, через admin_init):
add_action('admin_init', function() {
if ( current_user_can('manage_options') && isset($_GET['run_wc_cleanup']) ) {
premiumwp_delete_expired_wc_sessions();
echo 'Очистка сессий выполнена';
exit;
}
});Перейдите в админку по адресу https://site.ru/wp-admin/?run_wc_cleanup=1 для проверки.
Проверка результата после внедрения
- Через 1-2 дня после внедрения и регулярного запуска Cron проверьте таблицу
wp_woocommerce_sessions- она должна содержать только активные сессии. - Сравните размер таблицы и время отклика запросов сессий до и после очистки.
- Просмотрите логи ошибок сервера на предмет ошибок удаления.
Частые ошибки и как исправить
- Крон-задача не срабатывает. Проверьте, включен ли WP-Cron и заходят ли на сайт пользователи. Если нет, настройте системный cron на вызов wp-cron.php.
- Ошибка SQL при удалении. Убедитесь, что таблица
wp_woocommerce_sessionsсуществует и префикс таблиц совпадает с$wpdb->prefix. - Сессии не удаляются, хотя данные устарели. Проверьте правильность расчета времени в поле
session_expiry- должно храниться время в формате UNIX timestamp. - Конфликты с плагинами кэширования. Убедитесь, что плагины кэширования не мешают работе сессий WooCommerce.
Практические советы по безопасности и производительности
- Всегда делайте резервную копию базы перед внесением изменений в таблицы.
- Не увеличивайте слишком часто частоту запуска очистки, чтобы не нагружать базу.
- Для больших магазинов с сотнями тысяч сессий рассмотрите использование WP CLI команд для пакетного удаления, чтобы избежать таймаутов.
- Проверяйте логи ошибок сервера для выявления SQL-ошибок и фиксируйте их своевременно.
- Если используете плагин Clearfy Pro от WPShop, он может помочь в оптимизации базы и автоматическом удалении устаревших данных — рассмотрите его как альтернативу ручному коду.
Сравнение способов удаления неактивных корзин
| Метод | Плюсы | Минусы | Рекомендации |
|---|---|---|---|
| Код с WP-Cron | Полный контроль, без сторонних плагинов | Нужно следить за работой WP-Cron | Использовать для магазинов среднего размера |
| Плагин Clearfy Pro | Автоматизация, комплексная оптимизация | Платный, добавляет нагрузку | Для крупных магазинов с частой оптимизацией |
| WP CLI скрипты | Эффективно для больших баз, без нагрузки на сайт | Требует доступа к серверу и знаний CLI | Для профессиональных администраторов и хостингов |