WP_Query首页分页不显示,手动访问page/2正常,求代码排查
解决WP_Query静态首页分页控件不显示的问题
嘿,我一眼就揪出了你代码里的核心问题——这是静态首页自定义查询分页的典型踩坑点!
问题根源
你当前用get_query_var('page')来获取分页参数,但在使用自定义模板的静态首页中:
page是WordPress用来标识静态页面子页面的参数,根本不是文章分页的专用参数- 文章分页的正确参数是
paged - 手动输入
page/2能加载纯属巧合:你把page的值传给了paged参数,刚好匹配了分页需求,但WordPress的分页控件不会识别这个错误关联,所以控件完全生成不出来。
修复步骤
1. 修正分页参数的获取逻辑
把你代码里的$paged定义替换成以下代码,兼容静态首页和博客列表页的分页场景:
// 优先获取文章分页专用的paged参数 $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; // 静态首页下如果paged为空,再用page参数做兜底(避免极端场景) if (is_front_page() && !$paged) { $paged = ( get_query_var('page') ) ? get_query_var('page') : 1; }
2. 让分页控件绑定自定义查询的分页数据
因为你用了自定义的WP_Query($args),默认的paginate_links()会调用全局$wp_query的分页信息,导致控件生成错误。必须手动指定分页的总页数:
// 输出完文章列表后,添加修复后的分页控件 echo paginate_links(array( 'base' => get_pagenum_link(1) . '%_%', 'format' => '/page/%#%', 'current' => max(1, $paged), 'total' => $loop->max_num_pages, // 关键:使用自定义查询的总页数 'prev_text' => __('« 上一页'), 'next_text' => __('下一页 »'), 'type' => 'list' ));
3. 完整修正后的代码片段
<?php /** * Template Name: Frontpage * * @package Bootstrap Canvas WP * @since Bootstrap Canvas WP 1.0 */ get_header(); // 修正分页参数获取逻辑 $paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1; if (is_front_page() && !$paged) { $paged = ( get_query_var('page') ) ? get_query_var('page') : 1; } $args = array( 'post_type' => 'post', 'orderby' => 'ASC', 'paged' => $paged, 'posts_per_page' => 9 ); $loop = new WP_Query($args); // 输出文章列表 if ($loop->have_posts()) : while ($loop->have_posts()) : $loop->the_post(); // 这里放你的文章内容模板代码 the_title('<h2 class="post-title">', '</h2>'); the_excerpt(); endwhile; // 输出修复后的分页控件 echo paginate_links(array( 'base' => get_pagenum_link(1) . '%_%', 'format' => '/page/%#%', 'current' => max(1, $paged), 'total' => $loop->max_num_pages, 'prev_text' => __('« 上一页'), 'next_text' => __('下一页 »'), 'type' => 'list' )); wp_reset_postdata(); // 必须重置查询,避免影响后续全局内容 else : echo '<p class="no-posts">暂无文章</p>'; endif; get_footer(); ?>
额外注意事项
- 自定义查询结束后一定要调用
wp_reset_postdata(),避免后续WordPress函数使用错误的查询上下文 - 如果你的主题有自定义分页函数,也要确保它使用
$loop->max_num_pages而非全局的$wp_query->max_num_pages
内容的提问来源于stack exchange,提问作者user9743415
相关产品推荐
相关产品推荐

