如何为自定义WP_Query添加分页?求解决报错问题
解决WP_Query添加分页失败的问题
嘿,我来帮你搞定这个WP_Query分页的问题!你已经找对了方向——获取paged变量是实现分页的核心,但可能是没把它正确传入查询参数,或者没处理好分页导航的输出。咱们一步步来修改你的代码:
第一步:修正paged变量的获取
你的获取代码基本没问题,但要兼容静态首页的情况(静态首页用page而非paged作为分页参数),可以稍微调整一下:
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : ( get_query_var( 'page' ) ? get_query_var( 'page' ) : 1 );
第二步:把paged参数传入WP_Query并添加分页导航
你需要把上面获取到的$paged变量添加到$args数组里,同时在循环结束后加入分页导航的代码,完整修改后的代码如下:
<?php // WP_Query arguments $args = array( 'post_type' => array( 'post' ), 'post_status' => array( 'publish' ), 'nopaging' => false, 'posts_per_page' => '2', 'order' => 'DESC', 'orderby' => 'date', 'paged' => $paged, // 新增:传入分页参数 ); // The Query $query = new WP_Query( $args ); // The Loop if ( $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h3>' ); the_excerpt(); } // 新增:输出分页导航 if ( $query->max_num_pages > 1 ) { echo '<div class="pagination">'; echo paginate_links( array( 'base' => get_pagenum_link(1) . '%_%', 'format' => 'page/%#%/', 'current' => max( 1, $paged ), 'total' => $query->max_num_pages, // 必须用自定义查询的分页总数,别用全局$wp_query的 'prev_text' => '« 上一页', 'next_text' => '下一页 »', 'type' => 'list' // 输出为列表格式,方便后续加CSS样式 ) ); echo '</div>'; } } else { // 无文章时的提示 echo '<p>暂无文章</p>'; } // 恢复原始文章数据 wp_reset_postdata(); ?>
关键注意点
- 必须传入
paged参数:如果WP_Query里没有这个参数,它永远只会加载第一页的内容,这也是很多人分页失败的核心原因 - 用自定义查询的
max_num_pages:别用全局的$wp_query->max_num_pages,因为你用的是自定义查询,全局变量对应的是主查询的分页数据,和你的自定义查询不匹配 - 分页导航的位置:要放在循环结束后、
wp_reset_postdata()之前,这样才能正常访问到$query的属性 - 静态首页兼容:前面调整的
$paged变量获取逻辑,能确保静态首页的分页也能正常工作
如果之前报错,大概率是没把paged参数传入$args,或者分页导航用了全局的分页数据导致的。按照上面的代码修改后,应该就能正常显示分页了!
内容的提问来源于stack exchange,提问作者yeleek
相关产品推荐
相关产品推荐

