В плагине для способа доставки клиент может выбрать дату и время для доставки. Выбор временных интервалов выполняется в отдельном элементе 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
.
происходит несоответствие.
Извините, срок вашей сессии истек. Вернуться в магазин
Должен ли быть точный способ пересчета стоимости доставки по требованию?