WooCommerce AJAX Button for More Related Products
Looking to improve your product pages? Here’s how to add a “Load More Related Products” button using AJAX in WooCommerce without page reloads.
Step 1: Write JavaScript
Create custom-ajax-related-products.js
with this jQuery code snippet:
(function ($) { $(document).on('click', '#load-more-related-products', function (e) { e.preventDefault(); var btn = $(this); var page = btn.data('page'); $.post(wc_add_to_cart_params.ajax_url, { action: 'custom_load_more_related_products', product_id: btn.data('product-id'), page: page, }, function (response) { if (response) { $('#related-products').append(response); btn.data('page', page + 1); if ($.trim(response) === '') btn.remove(); } }); }); })(jQuery);
Step 2: Register Script
Enqueue it in your theme or plugin:
function add_ajax_script_for_related_products() { if (is_product()) { global $product; wp_enqueue_script('custom-ajax-related-products', get_stylesheet_directory_uri() . '/custom-ajax-related-products.js', ['jquery'], null, true); wp_localize_script('custom-ajax-related-products', 'custom_ajax_related_products', [ 'ajax_url' => admin_url('admin-ajax.php'), 'product_id' => $product->get_id(), 'page' => 2, ]); } } add_action('wp_enqueue_scripts', 'add_ajax_script_for_related_products');
Step 3: Handle AJAX Call
Add this to your functions.php
:
function load_more_related_products_ajax() { $product_id = intval($_POST['product_id']); $page = intval($_POST['page']); $related = new WP_Query([ 'post_type' => 'product', 'posts_per_page' => 4, 'post__not_in' => [$product_id], 'orderby' => 'rand', 'post_status' => 'publish', ]); if ($related->have_posts()) { ob_start(); while ($related->have_posts()) { $related->the_post(); wc_get_template_part('content', 'product'); } wp_reset_postdata(); echo ob_get_clean(); } wp_die(); } add_action('wp_ajax_custom_load_more_related_products', 'load_more_related_products_ajax'); add_action('wp_ajax_nopriv_custom_load_more_related_products', 'load_more_related_products_ajax');
Step 4: Add Container to Template
Place this markup in single-product.php
:
<div id="related-products"> <?php wc_get_template('single-product/related.php'); ?> </div>
Step 5: Test on Frontend
After saving all files, open any product page and try loading more related products via the button.