Skip to content

WordPress Pagination with Custom WordPress Queries

I don’t remember the last time I made a WordPress theme that didn’t do all sorts of unique stuff. I’ve never been interested in making standard blog designs and always want to create something a bit different. This throws up some issues then – most often with pagination – and it’s only recently that I found a solution.


I had always assumed that the next_posts_link and previous_posts_link functions were for use in combination with ‘the loop’, but it seems that’s not the case. Upon closer inspection they just dissect the url and increment or decrement the number of pages. By default they use the properties inside the loop, but you can override them.

In fact it turns out the only value you need to pass is the maximum number of pages in the query and this can be accessed through the query itself.

Assuming you are using the WP_Query object (the proper way) then you can access the object property ‘max_num_pages’ to get this info.

So – the next time you do a custom WordPress Query, and you want some pagination to work with it, all you have to do is something like the following:

$custom_query = new WP_Query( $args );
// custom loop here
next_posts_link( __( '« Older Posts', 'mimbopro' ), $custom_query->max_num_pages );
previous_posts_link( __( 'Newer Posts »', 'mimbopro' ), $custom_query->max_num_pages );


Old books image originally from Shutterstock.

1 Comment »

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

WordPress has a built in function, called human_time_diff, for creating messages that say how long ago a post was published – however I think it is confusing when you have posts from a long time ago that read “posted 15 […]

At WordCamp London last week I made my first contribution to WordPress – a bug fix for the Twenty Fourteen theme that’s being released with WordPress 3.8. Part of doing this involved created a patch. Now I know this is […]