Виджет мини-корзины Woocommerce Количество изменений - PullRequest
0 голосов
/ 15 декабря 2018

Я хочу изменить количество товаров в мини-корзине после добавления в корзину.Я получил решение из другого поста 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>

1 Ответ

0 голосов
/ 30 января 2019

Пожалуйста, добавьте этот метод ниже к вашему JS-коду

function supports_html5_storage() {
try {
    return 'localStorage' in window && window['localStorage'] !== null;
} catch (e) {
    return false;
}
}

и измените if ($ support_html5_storage) на if (support_html5_storage), вот и все.

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