Я хочу изменить количество товаров в мини-корзине после добавления в корзину.Я получил решение из другого поста stackoverflow, но по какой-то причине он работает медленно, чтобы обновить количество в виджете корзины. Это мой первый пост по stackoverflow, не очень представляю, как он работает.
URL страницы, на которой возникла проблема
Пользовательский код из 3 частей
Часть 1 из 3
//Plus Button for increase quantity
<a href="/tbones2/?wc-ajax=get_refreshed_fragments&add-to-cart=<?php echo $cart_item['product_id']; ?>" rel="nofollow" data-product_id="<?php echo $cart_item['product_id'] ?>" data=quantity="1" data-product_sku="<?php echo $cart_item['product_id']; ?>" class="wdiget_qty_btn add_to_cart_button ajax_add_to_cart"><i class="icon-plus-squared"></i>
</a>
Часть 2 из 3
Я создал шаблон для обработки триггеров setquantity.
<?php
/**
* Template Name: Request template for Set Quantity
* This page updates mini cart quantity for a product based on the post value
*/
//I dont think this line is needed
global $woo_options;
?>
<html>
<head>
<?php wp_head(); ?>
</head>
<body>
<?php
//the cart key stores information about cart
$cartKeySanitized = filter_var($_POST['cart_item_key'], FILTER_SANITIZE_STRING);
//the new qty you want for the product in cart
$cartQtySanitized = filter_var($_POST['cart_item_qty'], FILTER_SANITIZE_STRING);
//update the quantity
global $woocommerce;
ob_start();
$woocommerce->cart->set_quantity($cartKeySanitized,$cartQtySanitized);
ob_get_clean();
wp_footer(); ?>
<?php woo_foot(); ?>
</body>
</html>
Часть 3 из 3
Теперь в этой части есть функция Ajax для обновления количества в виджете корзины.
<script type="text/javascript">
function updateQty(key, qty) {
url = 'https://buzzpreview.com/tbones2/updatecart/';
data = "cart_item_key=" + key + "&cart_item_qty=" + qty;
jQuery.post(url, data).done(function (data) {
//function updateCartFragment
updateCartFragment();
});
}
function updateCartFragment() {
$('#mini-loader').html('loading...');
$fragment_refresh = {
url: woocommerce_params.ajax_url,
type: 'POST',
data: {action: 'woocommerce_get_refreshed_fragments'},
success: function (data) {
if (data && data.fragments) {
jQuery.each(data.fragments, function (key, value) {
jQuery(key).replaceWith(value);
});
if ($supports_html5_storage) {
sessionStorage.setItem("wc_fragments", JSON.stringify(
data.fragments));
sessionStorage.setItem("wc_cart_hash", data.cart_hash);
}
jQuery('body').trigger('wc_fragments_refreshed');
}
}
};
//Always perform fragment refresh
jQuery.ajax($fragment_refresh);
}
</script>