Performance: Pagination with custom queries
This affects page load speed and interaction responsiveness by controlling how much data is fetched and rendered at once.
<?php $paged = max(1, get_query_var('paged')); $args = array('posts_per_page' => 10, 'paged' => $paged); $query = new WP_Query($args); if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); the_title(); endwhile; endif; wp_reset_postdata(); ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array('posts_per_page' => -1, 'paged' => $paged); $query = new WP_Query($args); if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); the_title(); endwhile; endif; wp_reset_postdata(); ?>
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Load all posts at once | High (hundreds of nodes) | Multiple reflows | High paint cost | [X] Bad |
| Paginate with limited posts | Low (10-20 nodes) | Single reflow | Low paint cost | [OK] Good |
paged parameter in a custom WordPress query?paged in queriespaged parameter tells WordPress which page number of posts to fetch, enabling pagination.paged controls page number in pagination [OK]paged means page number for posts [OK]paged with category filterspaged to limit posts per pagepaged parameter in a custom WP_Query to enable pagination?pagedget_query_var('paged'), defaulting to 1 if not set.paged with get_query_var for pagination [OK]get_query_var('paged') or default to 1 [OK]page instead of pagedpaged to 0 disables paginationpagination parameter$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'];get_query_var('paged') behaviorget_query_var('paged') returns 3, so $paged is 3.$query->query_vars['paged'], which is set to 3.query_vars['paged'] to see current page [OK]$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();$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.wp_reset_postdata() is preferred after custom queries, the main error affecting pagination is missing default for $paged.$paged, may cause page 0 -> Option A$paged to 1 if empty [OK]$paged to 1 to avoid page 0 [OK]wp_reset_query() with wp_reset_postdata()get_query_var('paged') ?: 1 to get current page or default to 1.'paged' => $paged (not 'page'), and call wp_reset_postdata() after the loop.have_posts() and the_post() correctly.paged param and wp_reset_postdata() [OK]paged param and reset post data after loop [OK]Pass the test and this pattern moves unknown