Bird
Raised Fist0
Wordpressframework~20 mins

Pagination with custom queries in Wordpress - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Pagination Pro
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What is the output of this WordPress custom query pagination code?

Consider this WordPress loop with a custom query and pagination. What will be the output on the second page?

Wordpress
<?php
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = [
  'post_type' => 'post',
  'posts_per_page' => 3,
  'paged' => $paged
];
$query = new WP_Query($args);
if ($query->have_posts()) :
  while ($query->have_posts()) : $query->the_post();
    the_title('<h2>', '</h2>');
  endwhile;
  echo paginate_links(['total' => $query->max_num_pages, 'current' => $paged]);
endif;
wp_reset_postdata();
?>
AThrows a fatal error because 'paginate_links' requires a query argument
BDisplays posts 1 to 3 again because 'paged' is ignored, with pagination links
CShows no posts because 'paged' is not set correctly, but pagination links appear
DDisplays posts 4 to 6 with their titles and pagination links for total pages
Attempts:
2 left
💡 Hint

Check how the 'paged' parameter controls which posts appear on each page.

📝 Syntax
intermediate
1:30remaining
Which option correctly sets up pagination for a custom WP_Query?

Choose the correct way to pass the current page number to a custom WP_Query for pagination.

A
$paged = get_query_var('page') ?: 1;
$args = ['paged' =&gt; $paged];
B
$paged = $_GET['page'] ?? 1;
$args = ['paged' =&gt; $paged];
C
$paged = get_query_var('paged') ?: 1;
$args = ['paged' =&gt; $paged];
D
$paged = get_query_var('paged') ?: 0;
$args = ['paged' =&gt; $paged];
Attempts:
2 left
💡 Hint

WordPress uses 'paged' query var for pagination, not 'page'.

🔧 Debug
advanced
2:00remaining
Why does this custom query pagination always show the first page posts?

Look at this code snippet. Why does pagination not work and always show the first page posts?

Wordpress
<?php
$args = [
  'post_type' => 'post',
  'posts_per_page' => 5
];
$query = new WP_Query($args);
if ($query->have_posts()) :
  while ($query->have_posts()) : $query->the_post();
    the_title('<h3>', '</h3>');
  endwhile;
  echo paginate_links(['total' => $query->max_num_pages]);
endif;
wp_reset_postdata();
?>
AThe 'paged' parameter is missing from the query args, so it always fetches page 1
BThe 'posts_per_page' is too high, causing pagination to fail
CThe 'paginate_links' function is called without 'current' parameter, causing wrong page
DThe loop is missing wp_reset_postdata(), causing pagination to reset
Attempts:
2 left
💡 Hint

Check if the query knows which page to fetch.

❓ state_output
advanced
1:30remaining
What is the value of $query->max_num_pages after this custom query runs?

Assuming there are 12 published posts, what is the value of $query->max_num_pages after this query?

Wordpress
<?php
$args = [
  'post_type' => 'post',
  'posts_per_page' => 5,
  'paged' => 1
];
$query = new WP_Query($args);
// What is $query->max_num_pages?
?>
A3
B2
C5
D12
Attempts:
2 left
💡 Hint

Divide total posts by posts per page and round up.

🧠 Conceptual
expert
2:30remaining
Which option correctly explains why 'paged' must be passed to WP_Query for pagination?

Why is it necessary to pass the 'paged' parameter to a custom WP_Query when implementing pagination?

A'paged' is only needed for default queries, not custom WP_Query instances
B'paged' tells WP_Query which page of results to fetch; without it, the query always returns the first page
C'paged' controls the number of posts per page; without it, no posts are returned
D'paged' enables WordPress to cache query results for faster pagination
Attempts:
2 left
💡 Hint

Think about how WordPress knows which posts to show on page 2, 3, etc.

Practice

(1/5)
1. What is the main purpose of using the paged parameter in a custom WordPress query?
easy
A. To order posts by date
B. To filter posts by category
C. To specify which page of posts to display for pagination
D. To limit the number of posts shown on the homepage

Solution

  1. Step 1: Understand the role of paged in queries

    The paged parameter tells WordPress which page number of posts to fetch, enabling pagination.
  2. Step 2: Differentiate from other query parameters

    Other parameters like category or order control filtering and sorting, not pagination.
  3. Final Answer:

    To specify which page of posts to display for pagination -> Option C
  4. Quick Check:

    paged controls page number in pagination [OK]
Hint: Remember: paged means page number for posts [OK]
Common Mistakes:
  • Confusing paged with category filters
  • Using paged to limit posts per page
  • Ignoring the need to reset post data after custom queries
2. Which of the following is the correct way to include the paged parameter in a custom WP_Query to enable pagination?
easy
A. "page" => 1
B. "paged" => get_query_var('paged') ? get_query_var('paged') : 1
C. "paged" => 0
D. "pagination" => true

Solution

  1. Step 1: Identify correct syntax for paged

    The correct way is to get the current page number using get_query_var('paged'), defaulting to 1 if not set.
  2. Step 2: Check other options for correctness

    Options A, C, and D use wrong keys or values that won't work for pagination.
  3. Final Answer:

    "paged" => get_query_var('paged') ? get_query_var('paged') : 1 -> Option B
  4. Quick Check:

    Use paged with get_query_var for pagination [OK]
Hint: Use get_query_var('paged') or default to 1 [OK]
Common Mistakes:
  • Using page instead of paged
  • Setting paged to 0 disables pagination
  • Using non-existent pagination parameter
3. Given this code snippet, what will be the output if the current page is 3?
$paged = get_query_var('paged') ? get_query_var('paged') : 1;
$args = [
  'post_type' => 'post',
  'posts_per_page' => 5,
  'paged' => $paged
];
$query = new WP_Query($args);
echo $query->query_vars['paged'];
medium
A. 1
B. 5
C. 0
D. 3

Solution

  1. Step 1: Understand get_query_var('paged') behavior

    If the current page is 3, get_query_var('paged') returns 3, so $paged is 3.
  2. Step 2: Check what is echoed

    The code echoes $query->query_vars['paged'], which is set to 3.
  3. Final Answer:

    3 -> Option D
  4. Quick Check:

    Current page number echoed = 3 [OK]
Hint: Echo query_vars['paged'] to see current page [OK]
Common Mistakes:
  • Assuming default page 1 always prints
  • Confusing posts per page with page number
  • Expecting total posts count instead of page number
4. Identify the error in this pagination code snippet:
$paged = get_query_var('paged');
$args = [
  'post_type' => 'post',
  'posts_per_page' => 10,
  'paged' => $paged
];
$query = new WP_Query($args);
// Loop here
wp_reset_query();
medium
A. Missing default value for $paged, may cause page 0
B. Using wp_reset_query() instead of wp_reset_postdata()
C. Incorrect post type specified
D. Posts per page should be set to 5 for pagination

Solution

  1. Step 1: Check $paged initialization

    $paged is set directly from get_query_var('paged') without defaulting to 1, so if no page is set, it may be 0 or empty.
  2. Step 2: Evaluate other parts

    While wp_reset_postdata() is preferred after custom queries, the main error affecting pagination is missing default for $paged.
  3. Final Answer:

    Missing default value for $paged, may cause page 0 -> Option A
  4. Quick Check:

    Always default $paged to 1 if empty [OK]
Hint: Always default $paged to 1 to avoid page 0 [OK]
Common Mistakes:
  • Not setting default page number
  • Confusing wp_reset_query() with wp_reset_postdata()
  • Assuming posts per page must be 5
5. You want to create a paginated list of 'product' posts showing 8 per page. Which code snippet correctly sets up the custom query and pagination, including resetting post data?
hard
A. $paged = get_query_var('paged') ?: 1; $args = [ 'post_type' => 'product', 'posts_per_page' => 8, 'paged' => $paged ]; $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); the_title(); } } wp_reset_postdata();
B. $paged = 1; $args = [ 'post_type' => 'product', 'posts_per_page' => 8 ]; $query = new WP_Query($args); while ($query->have_posts()) { $query->the_post(); the_title(); } wp_reset_query();
C. $paged = get_query_var('page') ?: 1; $args = [ 'post_type' => 'product', 'posts_per_page' => 8, 'paged' => $paged ]; $query = new WP_Query($args); while ($query->have_posts()) { $query->the_post(); the_title(); } wp_reset_postdata();
D. $paged = get_query_var('paged') ?: 1; $args = [ 'post_type' => 'product', 'posts_per_page' => 8, 'page' => $paged ]; $query = new WP_Query($args); if ($query->have_posts()) { while ($query->have_posts()) { $query->the_post(); the_title(); } } wp_reset_postdata();

Solution

  1. Step 1: Correctly get current page number

    Use get_query_var('paged') ?: 1 to get current page or default to 1.
  2. Step 2: Set query args and reset post data

    Use 'paged' => $paged (not 'page'), and call wp_reset_postdata() after the loop.
  3. Step 3: Verify loop structure

    Check that the loop uses have_posts() and the_post() correctly.
  4. Final Answer:

    Code snippet D correctly sets up pagination and resets post data -> Option A
  5. Quick Check:

    Use paged param and wp_reset_postdata() [OK]
Hint: Use paged param and reset post data after loop [OK]
Common Mistakes:
  • Using 'page' instead of 'paged' in query args
  • Not resetting post data after custom query
  • Hardcoding page number to 1 disables pagination
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard