📖 Scenario: You are building a WordPress site that shows posts about different topics. You want to display only posts about a specific topic on a page.
🎯 Goal: Create a custom WordPress query that retrieves only posts from the category 'Travel'.
📋 What You'll Learn
Create a variable called $args with the query parameters to get posts from the 'Travel' category
Create a WP_Query object called $travel_query using the $args variable
Use a while loop with $travel_query->have_posts() and $travel_query->the_post() to loop through posts
Inside the loop, output the post title using the_title()
Reset post data after the loop with wp_reset_postdata()
💡 Why This Matters
🌍 Real World
Custom queries let you show specific posts on your WordPress site, like posts about travel, recipes, or news.
💼 Career
Understanding custom queries is essential for WordPress developers to build dynamic and personalized websites.
Progress0 / 4 steps
1
Set up query parameters
Create an array called $args with a key category_name set to the string 'travel'.
Wordpress
Hint
The category_name parameter filters posts by category slug.
2
Create the custom query
Create a WP_Query object called $travel_query using the $args array.
Wordpress
Hint
Use new WP_Query($args) to create the query object.
3
Loop through the posts
Use a while loop with $travel_query->have_posts() and inside it call $travel_query->the_post(). Inside the loop, call the_title() to display each post's title.
Wordpress
Hint
The loop checks if there are posts and sets up each post for display.
4
Reset post data
After the loop, call wp_reset_postdata() to restore the original post data.
Wordpress
Hint
This function resets the global post data to avoid conflicts.
Practice
(1/5)
1. What is the main reason to use a custom query in WordPress?
easy
A. To retrieve specific posts based on filters like category or author
B. To change the WordPress theme
C. To update the WordPress core automatically
D. To create new user accounts
Solution
Step 1: Understand the purpose of custom queries
Custom queries allow you to select posts based on specific rules like category, author, or date.
Step 2: Compare with other options
Changing themes, updating core, or creating users are unrelated to querying posts.
Final Answer:
To retrieve specific posts based on filters like category or author -> Option A
Quick Check:
Custom queries = filter posts [OK]
Hint: Custom queries filter posts; others change site settings [OK]
Common Mistakes:
Confusing custom queries with theme changes
Thinking custom queries update WordPress core
Assuming custom queries create users
2. Which of the following is the correct way to start a custom query in WordPress?
easy
A. $query = new WP_Query('category_name=news');
B. $query = new WP_Query(['category_name' => 'news']);
C. new WP_Query(['category_name' => 'news']);
D. $query = WP_Query('category=news');
Solution
Step 1: Check WP_Query syntax
WP_Query expects an array of arguments inside new WP_Query([...]).
Step 2: Identify correct array syntax
$query = new WP_Query(['category_name' => 'news']); uses the correct PHP array syntax with key 'category_name' and value 'news'.
Final Answer:
$query = new WP_Query(['category_name' => 'news']); -> Option B
The 'author' => 5 limits posts to author ID 5, 'posts_per_page' => 3 limits to 3 posts.
Step 2: Understand loop output
The loop prints titles of these 3 posts by author 5.
Final Answer:
The latest 3 posts by author with ID 5 -> Option A
Quick Check:
Author 5 + 3 posts = The latest 3 posts by author with ID 5 [OK]
Hint: Author ID and posts_per_page limit results [OK]
Common Mistakes:
Ignoring posts_per_page limit
Confusing author filter as exclusion
Assuming random posts without filter
4. What is wrong with this custom query code snippet?
$args = ['category_name' => 'news'];
$query = new WP_Query($args);
while ($query->have_posts()) {
$query->the_post();
echo get_the_title() . ' ';
}
medium
A. The WP_Query object is not created correctly
B. The category_name argument is invalid
C. The loop will never run because have_posts() is missing
D. It does not reset post data after the loop
Solution
Step 1: Check query and loop correctness
The query and loop syntax are correct and will run.
Step 2: Identify missing reset
After a custom query loop, you must call wp_reset_postdata() to restore global post data.
Final Answer:
It does not reset post data after the loop -> Option D
Quick Check:
Missing wp_reset_postdata() = It does not reset post data after the loop [OK]
Hint: Always reset post data after custom query loops [OK]
Common Mistakes:
Forgetting wp_reset_postdata() after loop
Thinking category_name is invalid
Assuming have_posts() is missing
5. You want to retrieve posts from category 'events' published after January 1, 2023, and only those with a custom field 'featured' set to 'yes'. Which WP_Query arguments array will achieve this?