Want to allow users to select quantity and add products to their WooCommerce cart without refreshing the page? Use AJAX and a little PHP to make it seamless.
How to Add AJAX Cart with Quantity in WooCommerce
Step 1: Create a JS File
Start by making a JavaScript file named custom-ajax-add-to-cart.js inside your theme or plugin folder. Paste this code inside:
(function ($) {
function handleAjaxAddToCart() {
$(document).on('submit', 'form.cart', function (e) {
e.preventDefault();
var $form = $(this);
var quantity = $form.find('input[name="quantity"]').val();
var data = $form.serialize();
$.ajax({
type: 'POST',
url: wc_add_to_cart_params.ajax_url,
data: data + '&add-to-cart=' + $form.data('product_id'),
beforeSend: function () {
$form.removeClass('success added-to-cart').addClass('loading');
},
complete: function () {
$form.removeClass('loading');
},
success: function (response) {
if (response && response.fragments) {
$.each(response.fragments, function (key, value) {
$(key).replaceWith(value);
});
}
},
});
});
}
$(document).ready(function () {
handleAjaxAddToCart();
});
})(jQuery);
Step 2: Load the Script in functions.php
Add this function in your functions.php:
function load_custom_ajax_script() {
if (is_shop()) {
wp_enqueue_script('custom-ajax-add-to-cart', get_stylesheet_directory_uri() . '/custom-ajax-add-to-cart.js', array('jquery'), '1.0', true);
}
}
add_action('wp_enqueue_scripts', 'load_custom_ajax_script');
Step 3: Add Quantity in Loop Template
Insert quantity input fields in your product loop:
<?php while (have_posts()) : the_post(); $product = wc_get_product(get_the_ID()); ?>
<div <?php wc_product_class('product-item'); ?>>
<form class="cart" data-product_id="<?php echo esc_attr(get_the_ID()); ?>">
<div class="quantity">
<input type="number" name="quantity" value="1" class="input-text qty text" min="1" step="1">
</div>
<button type="submit" class="button">Add to Cart</button>
</form>
</div>
<?php endwhile; ?>
Step 4: Save and Verify
Test your new setup on the WooCommerce shop page. Items should add to the cart dynamically.
Tips
Ensure the AJAX setting is enabled under WooCommerce → Settings → Products → General. Template changes may require adjustments.
