Возник вопрос: каким образом можно настроить автоматическое удаление старых незавершённых заказов из раздела Незавершенные покупки?
По идее, они должны быть привязаны к сроку жизни сессии, но сами никуда не исчезают - надо удалять руками.
У нас без всяких дополнительных настроек удаляются все незавершенные заказы сроком больше 1 календарного месяца. Остаются только незавершенные заказы от зарегистрированных пользователей.
Тут не все так просто, все сроки хранения прописаны в ядре.
То, что в админке в разделе “Незавершенные покупки” – это информационные данные для администратора; если их удалить, то у покупателя не очистится корзина/закладки. Записи старше 30 дней очищаются автоматически.
Есть отдельное хранение сессий с товарами в корзине/закладках для покупателей. Сессии для гостей хранятся 14 дней, после чего у покупателя очищается корзина/закладки. Для зарегистрированных и авторизованных хранение корзины/закладок – 30 дней (вроде бы).
Очистка происходит, если в заданный период пользователь не заходил на сайт. В ином случае сессия будет обновлена и срок хранения увеличится до изначального значения (так с хранением в redis работало, а с сессиями в бд – не факт).
В теории, можно без правок ядра сделать автоочистку по расписанию через sql scheduler (аналог cron для БД), который будет чистить данные из таблицы старше X-дней.
Это. Первая – незавершенные покупки в админке. Вторая – хранилище сессий.
cscart_sessions – тут сессии всего 2 часа хранятся и потом переносятся в cscart_stored_sessions на 2 недели.
Пример запросов:
DELETE FROM cscart_user_session_products WHERE timestamp < (UNIX_TIMESTAMP() - 604800)
DELETE FROM cscart_stored_sessions WHERE expiry < (UNIX_TIMESTAMP() - 604800)
604800 – срок в секундах (в данном случае неделя). То есть запросы удалят данные из таблиц старше 7 дней.
Добавляете две задачи на каждый запрос в “События” в phpmyadmin и они будут срабатывать по заданному расписанию.
Если раздела “События” нет, то попросите хостера включить sql sheduler.
Конфликтов в работе быть не должно, потому как настройки в ядре делают то же самое – чистят записи в БД старше определенного срока. Но лучше потестите на тестовой копии магазина и с меньшими сроками (1 час), если есть возможность.