У меня есть сайт электронной коммерции, созданный с помощью 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, уменьшения