Woocommerce AJAX添加到购物车按钮不更新项目数量

时间:2019-07-28 11:37:41

标签: php jquery ajax wordpress woocommerce

我在woocommerce网站中将Ajax Add to Cart功能与Item Qty Selection集成在一起。但是,当我选择数量并按“添加到购物车”按钮时,它仅在AJAX迷你购物车中添加一项。下面提到该代码,以供您参考。请帮助找出数量更新问题。

Function.php

function insertcart_wc_loop_add_to_cart_scripts() {   
 add_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_add_to_cart', 10 ); 
}
add_action( 'after_setup_theme', 'insertcart_wc_loop_add_to_cart_scripts' );

JS文件代码:

jQuery(function ($) {   
    $("form.cart").on("change", "input.qty", function() {
        if (this.value === "0")
            this.value = "1";
        $(this.form).find("button[data-quantity]").data("quantity", this.value);
    });    
    $(document.body).on("adding_to_cart", function() {
        $("a.added_to_cart").remove();
    });
});

我的主题> Woocommerce>循环> add-to-cart.php文件

global $product;
if( $product->get_price() === '' && $product->product_type != 'external' ) return;
// script for add-to-cart with qty
wp_enqueue_script('qty-add-to-cart', get_stylesheet_directory_uri() . '/js/qty-add-to-cart.js', array('jquery'), '1.0.1', true);
?>
<?php if ( ! $product->is_in_stock() ) : ?>
    <a href="<?php echo apply_filters( 'out_of_stock_add_to_cart_url', get_permalink( $product->id ) ); ?>" class="button"><?php echo apply_filters( 'out_of_stock_add_to_cart_text', __( 'Read More', 'woocommerce' ) ); ?></a>

<?php else : ?>

    <?php
        $link = array(
            'url'   => '',
            'label' => '',
            'class' => ''
        );
        switch ( $product->product_type ) {
            case "variable" :
                $link['url']    = apply_filters( 'variable_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'variable_add_to_cart_text', __( 'Select options', 'woocommerce' ) );
            break;
            case "grouped" :
                $link['url']    = apply_filters( 'grouped_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'grouped_add_to_cart_text', __( 'View options', 'woocommerce' ) );
            break;
            case "external" :
                $link['url']    = apply_filters( 'external_add_to_cart_url', get_permalink( $product->id ) );
                $link['label']  = apply_filters( 'external_add_to_cart_text', __( 'Read More', 'woocommerce' ) );
            break;
            default :
                if ( $product->is_purchasable() ) {
                    $link['url']    = apply_filters( 'add_to_cart_url', esc_url( $product->add_to_cart_url() ) );
                    $link['label']  = apply_filters( 'add_to_cart_text', __( 'Add to cart', 'woocommerce' ) );
                    $link['class']  = apply_filters( 'add_to_cart_class', 'add_to_cart_button' );
                } else {
                    $link['url']    = apply_filters( 'not_purchasable_url', get_permalink( $product->id ) );
                    $link['label']  = apply_filters( 'not_purchasable_text', __( 'Read More', 'woocommerce' ) );
                }
            break;
        }
        // If there is a simple product.
        if ( $product->product_type == 'simple' ) {
            ?>
            <form action="<?php echo esc_url( $product->add_to_cart_url() ); ?>" class="cart" method="post" enctype="multipart/form-data">
                <?php
                    // Displays the quantity box.
                    woocommerce_quantity_input();
                    // Display the submit button.
                    echo sprintf( '<button rel="nofollow" type="submit" data-product_id="%s" data-product_sku="%s" data-quantity="%s" class="%s button product_type_simple ajax_add_to_cart">%s</button>', 
                        esc_attr( $product->id ), 
                        esc_attr( $product->get_sku() ), 
                        esc_attr( isset( $quantity ) ? $quantity : 1 ),
                        esc_attr( $link['class'] ), 
                        esc_html( $link['label'] ) 
                    );                    
                ?>
            </form>
            <?php
        } else {
          echo apply_filters( 'woocommerce_loop_add_to_cart_link', sprintf('<a href="%s" rel="nofollow" data-product_id="%s" data-product_sku="%s" class="%s button product_type_%s">%s</a>', esc_url( $link['url'] ), esc_attr( $product->id ), esc_attr( $product->get_sku() ), esc_attr( $link['class'] ), esc_attr( $product->product_type ), esc_html( $link['label'] ) ), $product, $link );
        }
    ?>    
<?php endif; ?>

不更新带有数量的AJAX购物车

0 个答案:

没有答案