DEV Community

Md Aminur Islam
Md Aminur Islam

Posted on

How to Implement a WooCommerce AJAX Direct "Buy Now" Button

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>';
    }
}
Enter fullscreen mode Exit fullscreen mode

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, and wc_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(),
    )
);
Enter fullscreen mode Exit fullscreen mode

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);
Enter fullscreen mode Exit fullscreen mode

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.

Top comments (0)