Я использую планку в своей корзине, чтобы показать, сколько нужно потратить, чтобы получить бесплатную доставку. Пока что он работает нормально и обновляется, когда продукт добавляется или удаляется. Проблема в том, что он обновляется при КАЖДОЙ загрузке страницы, когда он нужен только в моей корзине.
function remaining_free_shipping($limit) {
$amount = wc()->cart->get_subtotal();
$discount = wc()->cart->get_discount_total();
$amount = $amount - $discount;
$remain = $limit - $amount;
if($remain<0) { $remain = 0; }
return $remain;
}
function show_upsell_shipping() {
$limit = 60000;
$remain = remaining_free_shipping($limit);
$perc = round(($limit-$remain)/$limit*100);
$class = "";
if($remain==0) {
$perc = 100;
$texto = "Tienes despacho GRATIS! ?";
$class = "free-ship";
} else {
$texto = "Te faltan " . wc_price($remain) . " para despacho gratis!";
}
echo "<div class='upsell-cart-shipping'>";
echo "<p>".$texto."</p>";
echo "<div class='bar ".$class."'>";
echo "<div class='actual-amount' style='width:".$perc."%;'></div>";
echo "</div>";
echo "</div>";
}
add_shortcode('show_upsell_shipping', 'show_upsell_shipping');
function update_fragments_on_cart($fragments) {
ob_start();
show_upsell_shipping();
$fragments['.upsell-cart-shipping'] = ob_get_clean();
return $fragments;
}
add_filter( 'woocommerce_add_to_cart_fragments', 'update_fragments_on_cart', 10 , 1 );
Есть функция show_upsell_shipping()
, которая отображает HTML, который показывает, сколько нужно. На каждом refre sh есть другая функция, которая обновляет фрагменты, update_fragments_on_cart($fragments)
Эта функция перехвачена:
add_filter( 'woocommerce_add_to_cart_fragments', 'update_fragments_on_cart', 10 , 1 );
Я пытался добавить условные выражения, например if(is_page('cart') || is_cart())
в разные части, но, очевидно, средство обновления фрагмента не заботится о том, где оно загружено.
Есть ли способ уменьшить нагрузку, загружая их только в корзину?