Кэширование корзины WooCommerce - PullRequest
0 голосов
/ 03 сентября 2018

В плагине для способа доставки клиент может выбрать дату и время для доставки. Выбор временных интервалов выполняется в отдельном элементе div, который отображается при выборе способа доставки.

Когда выбрано окно, итоги корзины обновляются с помощью Ajax (разные временные интервалы могут иметь разные цены). Но пока содержимое корзины одинаково, стоимость доставки не обновляется.

Как ужасный хакер, я реализовал сессионный убийцу, который устанавливает для продукта data_hash значение md5(time()), инициируя пересчет корзины.

function kill_shipping_cost_cache()
{
    if(WC()->session->get('chosen_shipping_methods')[0] == MY_SHIPPING_METHOD)
    {
        // START    Shipping cost cache killer
        $contents = WC()->cart->cart_contents;
        foreach ( $contents as $key => $content ) {
            $contents[ $key ]['data_hash'] = md5(time()); // Unset the hash to force cart update
        }
        WC()->cart->set_cart_contents( $contents );
        WC()->cart->calculate_shipping();
        // END      Shipping cost cache killer
    }
}

Это хорошо работает, но некоторые плагины для вариантов оплаты убивают корзину, когда в data_hash.

происходит несоответствие.

Извините, срок вашей сессии истек. Вернуться в магазин

Должен ли быть точный способ пересчета стоимости доставки по требованию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...