How to Let Users Dynamically Change the Number of Posts per Page in WordPress

How to Let Users Dynamically Change the Number of Posts per Page in WordPress


Think about the next situation: you’ve a WordPress weblog with a whole lot of posts. In your weblog archive web page, six posts seem at a time. In fact, there’s pagination for shifting between older and newer posts. However what if you wish to give customers the choice to decide on the variety of posts they wish to show per web page?

On this new tutorial, we’ll learn to obtain this performance. For this demonstration, I’ll work on an area set up with a toddler theme of Twenty Twenty-One (v1.6 on the time of this writing). Nonetheless, you possibly can simply incorporate the code that I’ll present right here into your customized themes.

Right here’s a fast video that demonstrates the anticipated performance:

Take note of how the URL will get an additional parameter when the chosen possibility adjustments.

Does this sound like train? Let’s dive in then!

This tutorial assumes that you just’re acquainted, to some extent, with creating WordPress themes.

1. Configure the Variety of Posts Displayed Per Web page

By default, all WordPress archive pages show ten posts per web page. That is one thing you may wish to configure based mostly in your layouts. For instance, in case your design is predicated on a three-column format, you’ll in all probability wish to present 9 posts per web page.

To perform this, navigate to the Studying sub-menu of the Settings menu and alter the worth of the Weblog pages present at most possibility. In my case, I’ll change this to 6.

The Reading sub-menu from where you can change the number of posts that will appear on the archive pagesThe Reading sub-menu from where you can change the number of posts that will appear on the archive pagesThe Reading sub-menu from where you can change the number of posts that will appear on the archive pages

2. Create Some Posts

To check this we’ll want some content material. In my case, I’ve created 35 posts.

The postsThe postsThe posts

3. Add the Required PHP and JavaScript to Your Theme

As I discussed earlier, for this instance I’ll arrange an area surroundings and work with a toddler theme of the Twenty Twenty-One theme. I’ll title my native web site playground. I assume that you just’re aware of easy methods to construct youngster themes, so I’ll skip these steps and solely focus on the components accountable for constructing the goal performance. 

You’ll find all of the information of the kid theme on this GitHub repository in case you wish to set up it and observe together with it as your energetic theme.

Right here’s its theme construction:

The child themeThe child themeThe child theme

Create the Dropdown

Let’s first begin from the front-end and construct the dropdown that can let customers resolve what number of posts will seem per web page.

The dropdownThe dropdownThe dropdown

Listed below are the steps that we’ll observe:

  • Seize the default posts per web page worth (6) and generate some multiples of this worth (12, 18, 24). In fact, right here, you possibly can cross values impartial from the default posts_per_page possibility.
  • Retailer all these generated values throughout the $posts_to_show array.
  • Create a choose component with choices that can come from the array values.
  • The worth of every possibility would be the present URL (the worth of $_SERVER['REQUEST_URI']) with the extra posts_to_show parameter appended to it. To attain this, we’ll use the add_query_arg() perform.
  • Add the chosen attribute to the suitable possibility based mostly on the worth of the posts_to_show parameter.

Right here’s the required PHP code:

And the generated markup:

The generated markup for the selectThe generated markup for the selectThe generated markup for the select

Relying in your theme construction, this code can exist in other places. In my case, I’ll place it within the dynamic-posts-per-page.php file. Subsequent, I’ll embody this file within the areas the place I want this performance. As I want it within the house, weblog, and archive pages, I’ll override the guardian theme index.php and archive.php information as follows: 

The index.php fileThe index.php fileThe index.php file

The archive.php fileThe archive.php fileThe archive.php file

It’s price noting that as an alternative of getting some predefined values from which customers can select the posts per web page, an alternate implementation will likely be to offer them the liberty to sort their desired quantity by way of an enter component. 

In any case, rule of thumb is to sanitize the enter knowledge (and usually what’s outputted) particularly once we don’t have full management of it, to forestall widespread assaults like XSS (Cross-site scripting). Fortunately, WordPress comes with varied built-in capabilities for this goal, but we are able to at all times use different built-in PHP capabilities as properly. For instance, to offer you an concept, within the code above I used the esc_url() perform to flee the output URL. 

Alter the Primary Question

To change the default posts_per_page worth and present the right posts based mostly on the customers’ choice, we’ll benefit from the pre_get_posts hook. 

Right here’s what we’ll do:

  • Use two conditionals to make sure that this modification will occur just for the primary question and on the frontend pages. From right here, we are able to go a step additional if we wish and restrict this performance solely to sure put up varieties, the weblog web page, and many others. Listed below are the conditional tags that WordPress supplies and might help you to be extra particular.
  • Examine to see if the posts_to_show parameter has been outlined within the URL. Do not forget that if that is outlined, which means that the person has made a range. In such a case, we’ll use that parameter worth to set the specified posts per web page. In some other case, the posts_per_page possibility worth will decide the variety of posts that ought to seem in every web page.

Right here’s the required PHP code that we must always add to the capabilities.php file:

Reload the Web page

Final however not least, we’ll pressure the web page to reload every time a person adjustments the chosen possibility.

Right here’s the JavaScript code we must always add to our theme:

In my case, I’ll add this piece to the foremost.js file situated within the belongings folder.


That’s all, people! Immediately we realized easy methods to give customers the choice to decide on the posts they wish to present per web page. This could be a welcome boost to your WordPress websites, particularly in case your archive pages comprise a variety of posts and customers must do a variety of clicking till they see all of them.

I hope you loved this little WordPress train as a lot as I did and that it helped you study one or two issues about WordPress theme improvement. 

As at all times, thanks quite a bit for studying!


We will be happy to hear your thoughts

Leave a reply

Enable registration in settings - general