Mastering AJAX Pagination for Custom Post Types in WordPress


WordPress is a popular content management system that offers a wide range of customization options. One such customization is implementing custom post-type pagination with Ajax, which allows for a smoother and more user-friendly browsing experience. In this comprehensive guide, we will explore the process of setting up custom post-type pagination with Ajax in WordPress.

What is Custom Post Type Pagination?

In WordPress, a custom post type is a way to define a new content type with its own set of specific attributes. By default, WordPress provides posts and pages as standard post types. However, for more specialized content, such as portfolio items, testimonials, or events, custom post types offer greater flexibility and organization. Pagination, on the other hand, is the process of dividing content into multiple pages for easier navigation and improved user experience.

Why Use Ajax for Pagination?

Ajax (Asynchronous JavaScript and XML) is a web development technique that allows for dynamic content loading without the need for page refresh. When it comes to pagination, using Ajax can significantly enhance the user experience by eliminating the wait time between page loads. This means that users can browse through multiple pages of content seamlessly and without interruptions.

Setting Up Custom Post-Type Pagination

We need to follow a few steps to implement custom post-type pagination in WordPress. Let's explore each step in detail.

Step 1. Defining the Custom Post Type

The first step is to define the custom post type that we want to paginate. This involves registering the post type using the register_post_type() function. We can specify various parameters such as the post type name, labels, and supported features.

Code example

function custom_post_type() {
  $args = array(
    'public' => true,
    'label'  => 'Portfolio',
    // Add more parameters here as needed
  register_post_type( 'portfolio', $args );
add_action( 'init', 'custom_post_type' );

In the above example, we register a custom post type called "Portfolio" with the register_post_type() function. Note that you can customize the parameters according to your specific requirements.

Step 2. Creating a Custom Query

Once we have defined the custom post type, we must create a custom query to fetch the desired posts. We can use the WP_Query class to achieve this.

Code example

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
$args = array(
  'post_type'      => 'portfolio',
  'posts_per_page' => 6,
  'paged'          => $paged,
$portfolio_query = new WP_Query( $args );

In the above example, we create a new instance of the WP_Query class and pass the necessary arguments. The paged parameter is used to determine the current page of the pagination.

Step 3. Implementing Pagination

To display the pagination links, we can use the paginate_links() function provided by WordPress. This function generates a set of pagination links based on the current query.

Here's an example of how to implement it.

Code example

if ( $portfolio_query->max_num_pages > 1 ) {
  echo '<div class="pagination">';
  echo paginate_links( array(
    'base'    => str_replace( 999999999, '%#%', esc_url( get_pagenum_link( 999999999 ) ) ),
    'format'  => '?paged=%#%',
    'current' => max( 1, $paged ),
    'total'   => $portfolio_query->max_num_pages,
  ) );
  echo '</div>';

In the above example, we check if there are multiple pages and then generate the pagination links using the paginate_links() function. The base and format parameters are used to define the URL structure of the pagination links.

Implementing Ajax for Pagination

Now that we have set up custom post-type pagination let's explore how to implement Ajax for a smoother browsing experience.

Step 1. Enqueuing the Script

First, we need to enqueue the JavaScript file that contains the Ajax functionality. We can use the wp_enqueue_script() function to achieve this. Here's an example:

function enqueue_ajax_pagination_script() {
  wp_enqueue_script( 'ajax-pagination', get_template_directory_uri() . '/js/ajax-pagination.js', array( 'jquery' ), '1.0', true );
add_action( 'wp_enqueue_scripts', 'enqueue_ajax_pagination_script' );

In the above example, we enqueue the ajax-pagination.js file located in the js directory of our theme. Make sure to replace the file path with the actual path to your JavaScript file.

Step 2. Adding the Ajax Functionality

Next, we need to add the Ajax functionality to our pagination links. We can achieve this by attaching a click event handler to the pagination links and preventing the default behavior. Here's an example:

$( '.pagination a' ).on( 'click', function( e ) {
  var link = $( this ).attr( 'href' );
  // Perform the Ajax request here

In the above example, we select all pagination links and attach a click event handler to them. Inside the event handler, we prevent the default behavior of the link and store the destination URL in the link variable.

Step 3. Updating the Content Dynamically

Finally, we need to update the content dynamically using the Ajax response. We can use the $.get() function to perform the Ajax request and update the content based on the response. Here's an example:

$.get( link, function( data ) {
  var portfolio = $( data ).find( '.portfolio' );
  $( '.portfolio-wrapper' ).html( portfolio );

In the above example, we use the $.get() function to fetch the content from the URL stored in the link variable. We then extract the desired content from the response using the find() function and update the content of the .portfolio-wrapper element.

Adding Styling and Animation

We can add custom CSS styles and animation effects to enhance the visual appeal of our custom post-type pagination. Let's explore the steps to achieve this.

Step 1. Creating CSS Styles

First, we need to create the necessary CSS styles to customize the appearance of the pagination links. You can add these styles to your theme's stylesheet or create a separate CSS file. Here's an example:

.pagination {
  margin-top: 20px;

.pagination a {
  display: inline-block;
  padding: 5px 10px;
  margin-right: 5px;
  background-color: #f2f2f2;
  color: #333;
  text-decoration: none;
  border-radius: 3px;

.pagination a:hover {
  background-color: #333;
  color: #fff;

.pagination .current {
  background-color: #333;
  color: #fff;

In the above example, we define styles for the pagination container, pagination links, and the currently active page. Feel free to customize these styles according to your design preferences.

Step 2. Adding Animation Effects

To add animation effects to the pagination, we can utilize CSS transitions or JavaScript libraries such as jQuery. Here's an example of how to animate the pagination links using jQuery:

$( '.pagination a' ).on( 'click', function( e ) {
  var link = $( this ).attr( 'href' );
  $( '.pagination a' ).removeClass( 'active' );
  $( this ).addClass( 'active' );
  // Perform the Ajax request and update the content here

In the above example, we add and remove the active class to the clicked pagination link. You can customize the animation effects by applying CSS transitions or using jQuery's fadeIn() and fadeOut() functions.

Remember, implementing custom post-type pagination with Ajax requires a solid understanding of WordPress development and JavaScript. Take the time to test and refine your implementation to ensure a seamless browsing experience for your website visitors. Happy coding!

Thank you & Regards

Jay Pankhaniya

Similar Articles