Drupal Commerce самостоятельно не удаляет устаревшие анонимные заказы в статусе "корзина", что приводит к бессмысленному распуханию таблицы commerce_order
.
"Устаревшими" я считаю заказы анонимных пользователей, чьи сессии были удалены сборщиком мусора (по умолчанию это сессии старше 3 дней).
Решаем проблему:
/**
* Implements hook_cron().
*/
function hook_cron() {
if (module_exists('commerce_order')) {
$order_ids = db_select('commerce_order', 'o')
->fields('o', array('order_id'))
->condition('o.uid', 0)
->condition('o.status', array('cart', 'checkout_checkout'))
->condition('o.changed', REQUEST_TIME - max(ini_get('session.gc_maxlifetime'), 86400), '<')
->range(0, 100)
->execute()
->fetchCol();
if ($order_ids) {
commerce_order_delete_multiple($order_ids);
watchdog('commerce_cart', 'Удалено ' . count($order_ids) . ' анонимных корзин', NULL);
}
}
}
Написанное актуально для
Commerce 1
Похожие записи
- Кэширование Views с товарами в Drupal Commerce
- Заменить названия способов оплаты на их Rule name
- Модуль Commerce Fast Ajax Add to Cart — ajax кнопка "Добавить в корзину" без кэширования формы
- Переместить описание выбранного метода оплаты под соответствующий input
- Весь checkout в Drupal Commerce на одной странице
Комментарии
Или можно поставить модуль https://www.drupal.org/project/commerce_cart_expiration
Добавить комментарий