在Woocommerce中使用Ajax刷新自定义迷你购物车的数量和内容

8 浏览
0 Comments

在Woocommerce中使用Ajax刷新自定义迷你购物车的数量和内容

我正在尝试制作自定义的迷你购物车。在删除商品后,购物车应该在不刷新页面的情况下进行更新(使用ajax),但实际情况并非如此,我在前端上看到无限加载,只有在页面刷新后才能看到更改。

我的迷你购物车动作:

function my_wc_mini_cart() {
        if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
            $count = WC()->cart->cart_contents_count;
            $cart = WC()->cart->get_cart();
            ?>
             
             $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 );
                        $variation_val = $cart_item['variation']['attribute_pa_size'];
                        $term_obj  = get_term_by('slug', $variation_val, 'pa_size');
                        $size_name = $term_obj->name;
                ?>
                        ">
                           
                                
                                
                                
                                ×',
                                    esc_url( wc_get_cart_remove_url( $cart_item_key ) ),
                                    __( '删除此商品', 'woocommerce' ),
                                    esc_attr( $product_id ),
                                    esc_attr( $cart_item_key ),
                                    esc_attr( $_product->get_sku() )
                                ), $cart_item_key );
                                ?>
                        
                
                
            

使用ajax更新购物车的动作,可能是我使用了错误的钩子...

function my_header_add_to_cart_fragment( $fragments ) {
        ob_start();
        $count = WC()->cart->cart_contents_count;
        $cart = WC()->cart->get_cart();
        ?>
         
             $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 );
                    $variation_val = $cart_item['variation']['attribute_pa_size'];
                    $term_obj  = get_term_by('slug', $variation_val, 'pa_size');
                    $size_name = $term_obj->name;
                    ?>
                    ">
                        
                            
                            
                            
                            ×',
                                esc_url( wc_get_cart_remove_url( $cart_item_key ) ),
                                __( '删除此商品', 'woocommerce' ),
                                esc_attr( $product_id ),
                                esc_attr( $cart_item_key ),
                                esc_attr( $_product->get_sku() )
                            ), $cart_item_key );
                            ?>
                
            
            
        

寻求建议和帮助。

前端显示和服务器响应的样子

更新:将$fragments['a.cart-contents'] = ob_get_clean();更改为$fragments['div.widget_shopping_cart_content'] = ob_get_clean();以返回正确的片段(而不是像屏幕截图中那样两个),但没有帮助

0