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

18.05.2017

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

Комментарии

Добавить комментарий