Данные Ajax Wocommerce не меняются после первого раза - PullRequest
0 голосов
/ 02 ноября 2019

У меня есть сайт электронной коммерции, созданный с помощью woocommerce и wordpress. Мне удалось создать кнопку добавления ajax в корзину для пользователя. Где пользователь выберет количество товара и нажмет кнопку «Добавить в корзину», и товар будет добавлен в корзину с количеством, выбранным пользователем. Что ж, у меня все получилось, но я столкнулся с одной проблемой: когда пользователь выбирает количество и впервые нажимает кнопку «Добавить в корзину», в корзину добавляется правильное количество товара. Например, пользователь выбрал 2 количества продукта, и 2 единицы этого продукта добавляются в корзину. Это нормально, но после первого изменения пользователем количества и повторного нажатия кнопки «Добавить в корзину» данные не меняются, я имею в виду сноваон добавит такое же количество (которое пользователь выбрал в первый раз, 1/2/3 или что-то еще) в корзину. Вот мой код в functions.php

add_action('wp_footer', 'my_custom_wc_button_script');
 function my_custom_wc_button_script() { ?>

    <script>
        jQuery(document).ready(function($) {

            var ajaxurl = "<?php echo esc_attr( admin_url( 'admin-ajax.php' ) ); ?>";
            $( document.body).on('click', '.my-custom-add-to-cart-button', function(e) {
                e.preventDefault();
                var $this = $(this);
                if( $this.is(':disabled') ) {
                    return;
                }
                var id = $(this).data("product-id");
                var q = $(this).data("product-quantity");
                var quantity = 1;
                if (q) {

                var quantity = q; 
                }

                $.ajax({
                   type: "POST",
                   url: ajaxurl,
                   data: {
                            action     : 'my_custom_add_to_cart',
                            product_id : id,
                            product_quantity : quantity
                         },
                  dataType : 'json',
                  beforeSend: function() {
                      $this.html('<i class="fa fa-spinner fa-spin"></i> Adding To Cart');
                  },
                  success:  function(response) {
                      $this.html('<i class="fa fa-shopping-cart"></i> Add To Cart');
                          if( response.success ) {
                           notify(response.message,'success','bottom','right');
                           $( document.body ).trigger( 'wc_fragment_refresh' );
                    } else {
                    notify(response.message,'warning','bottom','right');
                        }
                   }
                       }); // End Ajax Request

               }); // End Button Click


        });
    </script>

    <?php wp_localize_script( 'script', 'ajax_object', array(
        'ajaxurl' => admin_url( 'admin-ajax.php' ),
    )); ?>
    <?php } 
add_action('wp_ajax_my_custom_add_to_cart', "my_custom_add_to_cart");
add_action('wp_ajax_nopriv_my_custom_add_to_cart', "my_custom_add_to_cart");
function my_custom_add_to_cart() {
    $retval = array(
        'success' => false,
        'quantity' => "",
        'message' => ""
    );
    if( !function_exists( "WC" ) ) {
        $retval['message'] = "woocommerce not installed";
    } elseif( empty( $_POST['product_id'] ) ) {
        $retval['message'] = "No product id provided";
    } else {
        $product_id = $_POST['product_id'];
        $quantity = 1;
        if ( !empty($_POST['product_quantity']) && is_numeric($_POST['product_quantity']) ){
           $quantity =  $_POST['product_quantity'];
           $retval['quantity'] = $quantity;
        }
            $cart = WC()->cart;
            $retval['success'] = $cart->add_to_cart( $product_id, $quantity );
            if( !$retval['success'] ) {
                $retval['message'] = "Product Could Not Be Added To Cart";
            } else {
                $retval['message'] = "Product Added To Cart";
            }
    }
    echo json_encode( $retval );
    wp_die();
}

Мой интерфейс добавлен в код кнопки корзины

<form id="paddform" action="" method="post" class="sky-form" accept-charset="utf-8">

<div class="order">
<div class="buttons">
<div class="item_count">
<div class="quantity product-quantity">
<span class="btn decreasevalue" name='subtract'>
 <i class="fa fa-minus"></i>
</span>
<input type="number" class="form-control qty quantity-field cart_quantity" min="1" max="19" name='qty' value="1" id='qty' />
<span class="btn increasevalue" name='add'>
<i class="fa fa-plus">
</i></span>
</div>
<div class="stock">
Available </div>
</div>
</div>
</div>
<div class="buttons" style="display:inline-flex;">
<span class="my-custom-add-to-cart-button btn btn-theme-transparent btn-icon-left" data-product-id="<?php echo $product_id; ?>" data-product-quantity="1">
<i class="fa fa-shopping-cart"></i>
Add To Cart </span>
</form>

<script type="text/javascript">
$(document).ready(function(){


$(".decreasevalue").click(function(){
    var value=$('.quantity-field').val();
    if(value > 1){
        var value=--value;
    }
    $('.quantity-field').val(value);
    $(this).closest("form").find('.my-custom-add-to-cart-button').attr('data-product-quantity', value);
});

$(".increasevalue").click(function(){
    var value=$('.quantity-field').val();
    var max_val =parseInt($('.quantity-field').attr('max'));
    if(value < max_val){
        var value=++value;
    }
    $('.quantity-field').val(value);
    $(this).closest("form").find('.my-custom-add-to-cart-button').attr('data-product-quantity', value);
});



});
</script>

Я изменяю количество данных о продуктах путем увеличения jquery, уменьшения

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