Как исключить кэширование блока мини-корзины на всех страницах сайта?
Есть интернет-магазин на woocommerce и самописной теме. В header.php находится функция, выводящая кастомную мини-корзину со счётчиком и ценой добавленных товаров. Проблема заключается в том, что при включении кэширования, она начинает работать некорректно. Когда находишься на одной странице - всё работает и добавляется нормально. Но когда переходишь на другую страницу, а потом возвращаешься назад на ту же, в которой добавлял товары, то из кэша сначала визуально загружаются данные о цене и количества, которые были при изначальной загрузки данной страницы. Добавляю ещё один товар - и данные сразу верно корректируются. Прошу подсказать какие есть способы решения данной проблемы, чтобы вся страница кэшировалась, но не миникорзина. Либо как сделать, чтобы она обновлялась сразу при загрузке новой страницы. Заранее благодарю.
Код мини-корзины:
// Utility function that outputs the mini cart content
function my_wc_mini_cart_content(){
$cart = WC()->cart->get_cart();
foreach ( $cart as $cart_item_key => $cart_item ):
$_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
$product_id = apply_filters( 'woocommerce_cart_item_product_id', $cart_item['product_id'], $cart_item, $cart_item_key );
if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_widget_cart_item_visible', true, $cart_item, $cart_item_key ) ) {
$product_name = apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key );
$thumbnail = apply_filters( 'woocommerce_cart_item_thumbnail', $_product->get_image(), $cart_item, $cart_item_key );
$product_price = apply_filters( 'woocommerce_cart_item_price', WC()->cart->get_product_price( $_product ), $cart_item, $cart_item_key );
$product_link = apply_filters( 'woocommerce_cart_item_permalink', $_product->get_permalink( $_product ), $cart_item, $cart_item_key );
if(isset($cart_item['variation']['attribute_pa_size'])) {
$variation_val = $cart_item['variation']['attribute_pa_size'];
$term_obj = get_term_by('slug', $variation_val, 'pa_size');
$size_name = $term_obj->name;
}
?>
<a href="<?= $product_link ?>" class="media mini-cart__item woocommerce-mini-cart-item <?php echo esc_attr( apply_filters( 'woocommerce_mini_cart_item_class', 'mini_cart_item', $cart_item, $cart_item_key ) ); ?>">
<?php echo $thumbnail; ?>
<div class="media-body mini-cart__item-body">
<div class="mini-cart__item-heading mt-0"><?php echo $product_name; ?></div>
<?php
echo apply_filters( 'woocommerce_widget_cart_item_quantity', '<div class="cart__item-price">' .
sprintf( '%s × %s', $cart_item['quantity'], $product_price ) .
'</div>', $cart_item, $cart_item_key );
if( isset($size_name) ) { ?>
<div class="mini-cart__item-size"><?php echo $size_name; ?></div>
<?php } ?>
</div>
<div class="mini-cart__item-remove">
<?php
echo apply_filters( 'woocommerce_cart_item_remove_link', sprintf(
'<button href="%s" class="remove remove_from_cart_button" aria-label="%s" data-product_id="%s" data-cart_item_key="%s" data-product_sku="%s">×</button>',
esc_url( wc_get_cart_remove_url( $cart_item_key ) ),
__( 'Remove this item', 'woocommerce' ),
esc_attr( $product_id ),
esc_attr( $cart_item_key ),
esc_attr( $_product->get_sku() )
), $cart_item_key );
?>
</div>
</a>
<?php
}
endforeach;
if($cart){
?>
<a href="<?php echo get_permalink( wc_get_page_id( 'checkout' ) ); ?>" class="mini-cart__checkout hhv"><span><?php _e('Checkout', 'frosted'); ?></span></a>
<?php
} else{
?>
<p class="mini-cart__checkout">Add products to cart!</p>
<?php
}
}
// Hooked: The mini cart count and the cart content
add_action( 'frosted_header_top', 'my_wc_mini_cart' );
function my_wc_mini_cart() {
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
$count = WC()->cart->get_cart_contents_count();
$totalprice = WC()->cart->get_cart_contents_total();
?>
<a class="mini-cart__values" href="cart">
<svg width="25" height="25" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M0 2.5A.5.5 0 0 1 .5 2H2a.5.5 0 0 1 .485.379L2.89 4H14.5a.5.5 0 0 1 .485.621l-1.5 6A.5.5 0 0 1 13 11H4a.5.5 0 0 1-.485-.379L1.61 3H.5a.5.5 0 0 1-.5-.5zM3.14 5l.5 2H5V5H3.14zM6 5v2h2V5H6zm3 0v2h2V5H9zm3 0v2h1.36l.5-2H12zm1.11 3H12v2h.61l.5-2zM11 8H9v2h2V8zM8 8H6v2h2V8zM5 8H3.89l.5 2H5V8zm0 5a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0zm9-1a1 1 0 1 0 0 2 1 1 0 0 0 0-2zm-2 1a2 2 0 1 1 4 0 2 2 0 0 1-4 0z"/></svg>
<span id="cart_count" class="mini-cart__amount">
<?php echo esc_html( $count ); ?>
</span>
<span id="cart_totalprice" class="mini-cart__totalprice">
$<?php echo esc_html( $totalprice ); ?>
</span>
</a>
<div id="mini-cart-content" class="mini-cart__content"><?php my_wc_mini_cart_content(); ?></div>
<?php
}
}
// Ajax refreshing mini cart count and content
add_filter( 'woocommerce_add_to_cart_fragments', 'my_header_add_to_cart_fragment' );
function my_header_add_to_cart_fragment( $fragments ) {
$count = WC()->cart->get_cart_contents_count();
$totalprice = WC()->cart->get_cart_contents_total();
$fragments['#cart_count'] = '<span id="cart_count" class="mini-cart__amount">' . esc_attr( $count ) . '</span>';
$fragments['#cart_totalprice'] = '<span id="cart_totalprice" class="mini-cart__totalprice">$' . esc_attr( $totalprice ) . '</span>';
ob_start();
?>
<div id="mini-cart-content" class="mini-cart__content">
<?php my_wc_mini_cart_content(); ?>
<div>
<?php
$fragments['#mini-cart-content'] = ob_get_clean();
return $fragments;
}