How to Implement a WooCommerce AJAX Direct "Buy Now" Button
Md Aminur Islam
Posted on August 13, 2024
When you're running an online store using WooCommerce, making the purchasing process as seamless as possible is crucial. One effective way to do this is by adding a "Buy Now" button that allows customers to directly purchase a product without navigating through multiple pages. This blog will walk you through creating a WooCommerce AJAX "Buy Now" button using the provided code snippets.
Step 1: Add the "Buy Now" Button
First, you need to add a custom "Buy Now" button on your WooCommerce product pages. We'll do this by hooking into the woocommerce_after_add_to_cart_button action, which places our button right after the standard "Add to Cart" button.
Here's the PHP code snippet:
add_action( 'woocommerce_after_add_to_cart_button', 'add_content_after_addtocart' );
function add_content_after_addtocart() {
$current_product_id = get_the_ID();
$product = wc_get_product( $current_product_id );
if( $product->is_type( 'simple' ) ){
echo '<button data-id="'.$current_product_id.'" class="buy-now button"><i class="matico-icon-toys"></i>'.__('Buy Now', 'woocommerce').'</button>';
}
}
Explanation:
- We use the
woocommerce_after_add_to_cart_button
hook to insert our "Buy Now" button right after the "Add to Cart" button. - The
get_the_ID()
function retrieves the current product ID, andwc_get_product()
gets the product details. - We check if the product is of type simple and then render the button with the appropriate data-id attribute and a custom icon.
Step 3: Enqueue the Script
Next, you need to enqueue the script in your theme to ensure it's loaded properly on your WooCommerce pages. Here's how to do it:
wp_enqueue_script('matico-child-script', get_stylesheet_directory_uri() . '/assets/js/script.js', array( 'jquery', 'scrollfix-script' ), $matico_version, true);
wp_localize_script( 'matico-child-script', 'matico_child_script_obj',
array(
'checkout_page_url' => wc_get_checkout_url(),
)
);
Explanation:
-
wp_enqueue_script()
is used to load our custom script file (script.js
), which contains the jQuery code. -
wp_localize_script()
passes PHP data to the script, such as the checkout page URL, allowing us to use it within the script.
Step 2: Handle the AJAX Request
Finally, we'll handle the button click event using jQuery. The jQuery script sends an AJAX request to WooCommerce, which adds the product to the cart and then redirects the user directly to the checkout page.
Here's the jQuery code snippet:
(function ($) {
var MaticoChildThemeConfig = {
init: function () {
this.bindEvents();
},
bindEvents: function () {
$(document).on('click', '.buy-now', this.handleBuyNowClick);
},
handleBuyNowClick: function (event) {
event.preventDefault();
var $button = $(this),
quantity = parseFloat($button.closest('.quantity').find('.qty').val()) || 1,
productID = $button.data('id');
var data = {
product_id: productID,
quantity: quantity,
};
$.ajax({
type: 'POST',
url: wc_add_to_cart_params.wc_ajax_url.toString().replace('%%endpoint%%', 'add_to_cart'),
data: data,
dataType: 'json',
beforeSend: function () {
$button.addClass('loading');
},
success: function (res) {
if (res.error && res.product_url) {
window.location.href = res.product_url;
} else {
window.location.href = matico_child_script_obj.checkout_page_url;
}
}
});
}
};
MaticoChildThemeConfig.init();
})(jQuery);
Explanation:
- When the "Buy Now" button is clicked, we prevent the default action to avoid page reload.
- We gather the product ID and quantity from the current product page.
- An AJAX request is sent to WooCommerce's add_to_cart endpoint, which adds the product to the cart.
- If the product is successfully added, we redirect the user to the checkout page. If there's an error (e.g., the product is no longer available), the user is redirected to the product page.
Conclusion
By implementing the above steps, you can create a "Buy Now" button that streamlines the purchasing process for your customers. This feature is particularly useful in boosting conversions by reducing the number of clicks and pages a customer needs to navigate before completing a purchase.
Posted on August 13, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 13, 2020