xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Автоматическое удаление устаревших анонимных заказов в статусе "корзина"

Опубликовано в

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.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
Похожие записи

Комментарии RSS

Или можно поставить модуль https://www.drupal.org/project/commerce_cart_expiration

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании