Enhance Shopify User Experience with Load More Button

Published on Aug 8, 2024

By Emma Johnson

#Shopify#Web Development#E-commerce
Smiling Girl in Gray Crew Neck Shirt Beside Smiling Girl in Gray Crew Neck Shirt

Are you looking to enhance your Shopify store’s user experience by implementing a “Load More” button for your product collections? This feature can significantly improve page load times and create a smoother browsing experience for your customers. In this comprehensive guide, we’ll walk you through the process of adding a Load More button to your Shopify collection pages, eliminating the need for pagination.

Understanding the Load More Functionality

What is Load More?

Load More is a popular web design pattern that allows users to view additional content without navigating to a new page. In the context of Shopify collections, it enables customers to load more products onto the same page as they scroll, creating a seamless browsing experience.

Benefits of Load More

Implementing a Load More button offers several advantages:

  1. Improved user experience
  2. Faster initial page load times
  3. Reduced server load compared to traditional pagination
  4. Increased engagement as users stay on the same page

How Load More Works in Shopify

The Load More functionality uses AJAX to fetch additional products from subsequent pages and append them to the existing product grid. This approach keeps users on the same page while dynamically loading more content.

Implementing Load More in Shopify

Modifying the Collection Template

The first step in adding Load More functionality is to modify your collection template. Here’s how to do it:

  1. Locate your collection-template.liquid file in the Sections directory of your theme.
  2. Find the condition for pagination, typically something like {% if paginate.pages > 1 %}.
  3. Within this condition, add the following code:
<input type="hidden" value="{{ paginate.next.url }}" data-next-url>
<input type="hidden" value="{{ paginate.pages }}" data-total-pages>
<input type="hidden" value="{{ paginate.current_page }}" data-current-page>
<div class="load-more_wrap" style="text-align: center; margin-top: 40px;">
  <button class="btn js-load-more">
    <span load-more-text>Load more</span>
    <span class="hide" loader>Loading...</span>
  </button>
</div>

This code creates hidden inputs to store pagination data and adds a Load More button to your collection page.

Adding JavaScript Functionality

Next, you’ll need to add JavaScript to handle the Load More button’s functionality. Add the following code to your theme.js file:

$('.js-load-more').on('click', function(){
  var $this = $(this);
  var totalPages = parseInt($('[data-total-pages]').val());
  var currentPage = parseInt($('[data-current-page]').val());
  
  $this.attr('disabled', true);
  $this.find('[loader]').removeClass('hide');
  
  currentPage = currentPage + 1;
  var nextUrl = $('[data-next-url]').val().replace(/page=[0-9]+/,'page='+currentPage);
  $('[data-current-page]').val(currentPage);
  
  $.ajax({
    url: nextUrl,
    type: 'GET',
    dataType: 'html',
    success: function(responseHTML){
      $('.grid--view-items').append($(responseHTML).find('.grid--view-items').html());
    },
    complete: function() {
      if(currentPage < totalPages) {
        $this.attr('disabled', false);
        $this.find('[load-more-text]').removeClass('hide');
        $this.find('[loader]').addClass('hide');
      } else {
        $this.attr('disabled', true);
        $this.find('[load-more-text]').addClass('hide');
        $this.find('[loader]').addClass('hide');
      }
    }
  });
});

This JavaScript code handles the click event on the Load More button, fetches the next page of products, and appends them to the existing product grid.

Styling the Load More Button

To ensure your Load More button looks good and fits with your theme, you may want to add some CSS. Here’s a basic example:

.load-more_wrap {
  text-align: center;
  margin-top: 40px;
}

.js-load-more {
  padding: 10px 20px;
  background-color: #000;
  color: #fff;
  border: none;
  cursor: pointer;
  transition: background-color 0.3s ease;
}

.js-load-more:hover {
  background-color: #333;
}

.js-load-more[disabled] {
  opacity: 0.5;
  cursor: not-allowed;
}

Add this CSS to your theme’s stylesheet to style the Load More button.

Troubleshooting Common Issues

Button Not Appearing

If the Load More button doesn’t appear, ensure that you’ve added the code to the correct location in your collection-template.liquid file. It should be within the pagination condition.

Products Not Loading

If clicking the button doesn’t load new products, check your browser’s console for JavaScript errors. Ensure that jQuery is properly loaded and that your theme.js file is being included correctly.

Duplicate Products

Sometimes, the Load More functionality may load duplicate products. To fix this, ensure that your JavaScript is correctly updating the currentPage variable and that the AJAX request is using the correct URL for the next page.

Optimizing Load More for Performance

Lazy Loading Images

To further improve performance, consider implementing lazy loading for product images. This technique loads images only as they come into view, reducing initial page load time.

Caching Loaded Products

Implement client-side caching of loaded products to improve the user experience when navigating back to the collection page. This can be done using browser storage APIs like localStorage.

Infinite Scroll Alternative

As an alternative to the Load More button, you might consider implementing infinite scroll. This automatically loads more products as the user scrolls to the bottom of the page, creating an even more seamless experience.

Customizing the Load More Experience

Changing Button Text

You can easily customize the text of the Load More button by modifying the HTML in your collection-template.liquid file. For example:

<span load-more-text>Show More Products</span>

Adding Loading Animations

To provide visual feedback while loading products, consider adding a loading animation. You can use CSS animations or GIF images to create an engaging loading indicator.

Adjusting Products Per Load

You can control how many products are loaded each time by adjusting the paginate tag in your collection template. For example:

{% paginate collection.products by 12 %}

This would load 12 products at a time.

By following this guide, you should now have a fully functional Load More button for your Shopify collection pages. Remember to test thoroughly across different devices and browsers to ensure a consistent experience for all your customers. Happy coding!

Take Our Quick Quiz:

Which primary product image do you think has the highest conversion rate?