WordPress新闻分类分页第二页URL正常但页面空白问题求助
问题根因
- 分页current参数取值错误:
paginate_links配置中的current参数直接调用get_query_var('paged'),如果代码运行在自定义页面模板、静态首页等场景,主查询不会携带自定义查询的分页参数,导致第二页查询时current值异常,查询偏移错误返回空 - 分页格式与固定链接冲突:
format参数写死为?paged=%#%,开启固定链接的站点会出现参数传递失效,无法正确读取第二页的分页值 - 全局变量声明顺序错误:
global $wp_query声明在变量赋值之后,导致paginate_links读取到的仍然是默认主查询,而非你创建的自定义查询 - 冗余逻辑干扰:原有代码中的
$i计数逻辑完全无效,不影响运行但属于冗余代码可以直接删除
修复后的完整代码
<?php // 先声明全局变量 global $wp_query; // 正确获取分页参数 if ( get_query_var('paged') ) { $paged = get_query_var('paged'); } elseif ( get_query_var('page') ) { $paged = get_query_var('page'); } else { $paged = 1; } $cquery = new WP_Query(array( 'post_type' => 'news', 'paged' => $paged, 'posts_per_page' => 5 )); if ($cquery->have_posts () ) : while ($cquery->have_posts () ) : $cquery->the_post(); ?> <!-- 你的文章输出代码放在这里 --> <?php endwhile; endif; ?> <?php if ($cquery->max_num_pages > 1) : $orig_query = $wp_query; $wp_query = $cquery; $big = 999999999; ?> <ul class="pagination"> <li> <?php echo paginate_links( array( 'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ), // 自动适配固定链接和默认链接格式 'format' => get_option('permalink_structure') ? 'page/%#%/' : '?paged=%#%', // 直接用前面已经获取到的$paged变量,避免重新读取query_var出错 'current' => max( 1, $paged ), 'total' => $cquery->max_num_pages, 'prev_text' => __('« Previous'), 'next_text' => __('Next »'), ) ); $wp_query = $orig_query; ?> </li> </ul> <?php endif; wp_reset_postdata(); ?>
修复完成后进入后台「设置→固定链接」,直接点击保存按钮刷新重写规则,清空站点缓存后再测试分页即可。
更优方案(彻底避免自定义查询分页冲突)
如果你的代码是放在news自定义文章类型的归档模板archive-news.php中,不需要自定义WP_Query,直接通过钩子修改主查询即可,分页逻辑完全不需要额外处理:
- 将以下代码添加到主题
functions.php文件中
add_action('pre_get_posts', function($query) { // 仅修改前台news自定义文章类型的主查询,不影响后台和其他页面 if (!is_admin() && $query->is_main_query() && is_post_type_archive('news')) { $query->set('posts_per_page', 5); } });
archive-news.php直接使用默认主循环和默认分页函数即可,完全不会出现分页异常问题。
内容的提问来源于stack exchange,提问作者Jklyn
相关产品推荐
相关产品推荐

