How to Customize the Loop in WordPress

Share this:

Customizing the Loop with different granularities of data access

In our opening post of the Loop and it’s flow of control, we specified that the primary workhorse for information determination is the get_ posts() method of the WP_Query object.

Much of the time, on the off chance that you need to construct a custom loop, you’ll assemble your own particular WP_Query object and reference it expressly.

On the other hand, you can utilize the lower level query_ posts() and get_ posts() functions (not to be mistaken for the strategies inside the WP_query object of a similar name) to control the yield of the default query that was passed into your Loop.

Both query_ posts and get_ posts utilize the WP_Query class to retrieve content. We’ll take a gander at the lower level methodologies and talk about how and where you ought to — and shouldn’t — utilize them, however we’ll begin with an exchange of how you assemble a custom query object.

Utilizing the WP_Query Object

When WordPress is given a URL to parse by the web server, it goes to work dismantling the tokens in that URL and changing over them into parameters for a database query. Here’s more fine grained detail on what happens while manipulating your own particular WP_Query.

WP_Query is a class defined in WordPress that makes it simple to make your own particular custom Loops. Both query_ posts and get_ posts utilize the WP_Query class to recover the WordPress content.

When you’re utilizing query_ posts() the worldwide variable $wp_query is utilized as a case of WP_Query, making $wp_query the default information store for a few operations. Custom Loops can be utilized any place as a part of your topic format documents to show diverse sorts of content; they should expand on partitioned examples of a WP_Query variable.

When you make another WP_Query query, it’s instantiated with some default capacities for building query, executing the inquiry to get posts, and parsing parameters out of a URL. Nonetheless, you can utilize these implicit built-in object methods to build your own parameter strings, making custom loops that separate whatever specific content you require for that point in your Loop.


The accompanying is a case of a custom Loop showing the five latest posts on your site:

Instead of utilizing the more straightforward have_ posts() and the_ post() calls that we found in the fundamental Loop, this custom query calls the methods for the recently made WP_Query object myPosts.

The explicit invocation shown here and the default have_ posts() call are practically comparable; have_ posts() for instance is simply calling $wp_query->have_ posts() utilizing the worldwide question variable for the default inquiry, that is, the one created from parsing the URL gave to WordPress by the web server.

Going into your default Loop from the URL used to invoke WordPress, there’s an extra stride that takes the URL and parses it into a fitting question string utilizing the parse_query() technique for the query object. When you fabricate your own custom Loop, you explicitly set the parameters you need to control the query. Here’s greater detail on what happens inside the query function:

➤ Calling $myPosts->query() changes over the parameters into a SQL statement by means of the function $myPosts->get_ posts(), which then executes the query against the MySQL database and removes the content you’ve asked.

➤ Equally essential, the query call sets the conditional tags, for example, is_home() and is_single() that are dependent upon the kind of page showed and the amount of substance for that page.

➤ The array of posts returned by the query is cached by WordPress so future references to a same query won’t create extra database activity.

The way to building a powerful custom Loop is to outline content selection criteria into the right set of query parameters.

Building A Custom Query

Parameters are utilized to characterize what content will be returned in your Loop, whether a custom Loop or modifying the primary Loop. At the point when making Loops it’s basic to comprehend what parameters are accessible to characterize what content will be shown.

You can utilize a wide range of, here and there confounding, parameters in making your custom Loop to modify the output of your content.

Multiple parameters can likewise be set per inquiry by isolating the parameter name and values with an ampersand. For a nitty gritty rundown of accessible parameters, visit posts#Parameters.

Taking after are a portion of the all the more regularly utilized parameters.

Post Parameters

The most self-evident, and now and then most utilized parameters, select the number and sorts of presents on be shown:

➤ p=3: Loads an individual post by ID.

➤ name=my-slug: Loads post in view of post slug (permalink tail).

➤ post_status=pending: Loads posts by post status. For instance, on the off chance that you decide to just observe drafts, utilize post_status=draft .

➤ caller_ get_ posts=1: Excludes sticky posts from being returned first. A ”sticky post” is one that dependably sorts to the leader of the rundown of posts, free of alternate parameters set for the question.

You can have different sticky posts, making them valuable for news declarations, highlighting changes, or generally snatching reading attention, and this parameter lets you drop them from their need space at the header of the list.

➤ post_type=page: Loads posts based on type. In the event that you just need to take a gander at pages, not posts, post_type=page will retrieve them.

➤ posts_ per_ page=5: Number of presents on load per page. This is the default.

➤ offset=1: Number of presents on skip before loading.

Page Parameters

Pages have parameters like those for presents on control their choice:

➤ page_id=5: Loads an individual page by ID. Like post ids and user ids, page ids can be found in the dashboard by hovering over a page, and taking a gander at the URL showed at the base on your program.

➤ pagename=Contact: Loads a page by name, for this situation the “Contact” page.

➤ pagename=parent/child: Loads a child page by slug, or chain of command of slugs (that is, its way).

Category, Tag, and Author Parameters

Posts can likewise be sorted by the class into which they were put, labels connected to the post, or creator data:

➤ cat=3,4,5: Load posts in view of category ID.

➤ category_name=About Us: Loads posts in light of classification name. Take note of that if a post has a place with more than one class, it will appear in determinations for each of those classifications.

➤ tag=writing: Loads posts in light of label name.

➤ tag_id=30: Loads posts in light of tag ID.

➤ author=1: Loads posts in light of author ID.

➤ author_name=Brad: Loads posts in view of author’s name.

Time, Date, Ordering, and Custom Parameters

Parameters to select content in view of their order are a key a portion of building a archive of posts, then again giving a view into substance through a schedule on your blog’s landing page.

You can likewise change the sort parameter and the sort order. In case you’re building an online index, and need to demonstrate an in order post posting, you’ll set the parameters for querying posts by month and author, yet arrange the outcomes by title.

➤ monthnum=6: Loads posts made in June.

➤ day=9: Loads posts made on the ninth day of the month.

➤ year=2016: Loads posts made in 2016.

➤ orderby=title: Field to request posts by.

➤ order=ASC: Defines climbing or diving request of orderby.

➤ meta_key=color: Loads posts by custom field name.

➤ meta_value=blue: Loads posts by custom field value. Must be utilized as a part of conjunction with the meta_key parameter above.

Assembling It

We should take a gander at a few cases utilizing parameters. The accompanying illustrations utilize the $myPosts->query() work from the $myPosts custom query object made in the case to choose the content showed in your custom Loop.

Show post based on post ID:

Show the five most recent posts, avoiding the first post:

Show all posts from today:

Show all posts from October 31st, 2016:

Show all posts from classification ID 5 with the bacon tag:

Show all posts with the bacon tag, barring posts in classification ID 5:

Show all posts with the label composing OR perusing:

Show all posts with the labels composing AND perusing AND television:

Show all posts with a custom field named shading with an estimation of blue:

Adding Paging To A Loop

On the off chance that your custom Loop requires paging (navigation links), you should make a couple of additional strides.

Paging is as of now intended to work just with the $wp_query global variable; that is, it works inside the default Loop and requires some sleight of hand to make it work in custom loops. You have to trap WordPress into speculation your custom query is really $wp_query for paging to work.

Initially you need to store the first $wp_query variable into the brief variable $temp. Next you set $wp_query to invalid to totally flush it clean.

This is one of only a handful few circumstances it’s adequate to overwrite a worldwide variable esteem in WordPress. Presently set your new WP_Query query into the $wp_query variable furthermore, execute it by calling the query’s query() function to choose posts for your custom Loop.

See the $paged variable added to the end of the query. This stores the present page so WordPress knows how to show the route joins. Presently show your route joins for paging:

At long last, you have to reset $wp_query back to its unique esteem:

Presently your custom Loop will contain appropriate pagination in light of the content returned.

We’ll discuss query_posts() function in WordPress.

What are your thoughts about this post? Let me know in the comments!

Did you like this article about customizing Wordpress? Share it with your friends on Facebook, Twitter, and Google Plus!

Don’t forget to Subscribe to our Newsletter for more insightful post updates, tips and guides!

See you in the next post.

Stay awesome!

Authored By Aakanksha Singh

Hi, I’m Aakanksha, a computer science engineer and the founder of TheTechPower. I help people make there online presence process easier by empowering them with clean, beautiful and easy to use wordpress themes.

Share this:

Leave a Reply