WordPress新闻页分页功能无法加载问题求助
WordPress新闻页面分页组件不显示的修复方案
你的代码能正常获取文章,但分页组件无法加载,核心原因有两个:
the_posts_pagination()默认依赖全局的$wp_query对象,自定义WP_Query查询的数据它无法识别- 代码未处理当前页码参数,WordPress无法判断是否需要触发分页
下面是两种可行的修复方法:
方法一:使用 paginate_links()(推荐,更灵活)
paginate_links() 支持传入自定义查询的分页数据,无需依赖全局对象。修改后的完整代码如下:
<div class="page-header" id="page-header=news"> <h1>News</h1> </div> <?php // 获取当前页码,静态首页场景改用get_query_var('page') $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'post_type' => 'post', 'posts_per_page' => 10, 'paged' => $paged, // 新增分页页码参数 ); $query = new WP_Query($args); if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); get_template_part('template-parts/content', get_post_type()); endwhile; ?> <div class="pagination"> <?php echo paginate_links(array( 'base' => str_replace(999999999, '%#%', esc_url(get_pagenum_link(999999999))), 'total' => $query->max_num_pages, // 自定义查询的总页数 'current' => $paged, // 当前页码 'prev_text' => __('Previous page', 'mothertongues'), 'next_text' => __('Next page', 'mothertongues'), 'mid_size' => 1, // 当前页码两侧显示的页码数 'end_size' => 2, // 首尾显示的页码数 )); ?> </div> <?php wp_reset_postdata(); else : get_template_part('template-parts/content', 'none'); endif; ?>
方法二:临时替换全局 $wp_query
如果你想继续使用 the_posts_pagination(),可以临时将全局查询替换为自定义查询,用完后恢复:
<div class="page-header" id="page-header=news"> <h1>News</h1> </div> <?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'post_type' => 'post', 'posts_per_page' => 10, 'paged' => $paged, ); $query = new WP_Query($args); if ($query->have_posts()) : while ($query->have_posts()) : $query->the_post(); get_template_part('template-parts/content', get_post_type()); endwhile; ?> <div class="pagination"> <?php // 临时保存全局查询对象 $temp_wp_query = $wp_query; // 替换为自定义查询 $wp_query = $query; the_posts_pagination(array( 'next_text' => __('Next page', 'mothertongues'), 'prev_text' => __('Previous page', 'mothertongues'), )); // 恢复全局查询对象 $wp_query = $temp_wp_query; ?> </div> <?php wp_reset_postdata(); else : get_template_part('template-parts/content', 'none'); endif; ?>
注意事项
- 确保文章总数超过
posts_per_page设置的数量,否则分页组件不会显示 - 如果新闻页面是静态首页(后台设置「首页显示」为静态页面),需将获取页码的代码改成:
$paged = (get_query_var('page')) ? get_query_var('page') : 1;
内容的提问来源于stack exchange,提问作者Ivan Bezerra
相关产品推荐
相关产品推荐

