WordPress分类页面分页失效,所有页面内容重复问题求助
WordPress分类页面分页内容重复问题修复
问题根源
get_posts()默认不处理分页逻辑,且你固定了offset => 0,导致所有页面都从第1篇文章开始读取the_posts_pagination()依赖主查询的分页参数,自定义查询未传递正确的分页上下文- 循环中
$display每次赋值会覆盖之前的内容,最终只返回最后一篇文章的链接 - 参数拼写错误:
category__not_inint应为category__not_in
修复后的代码
global $post; // 获取当前分类ID $current_cat = get_the_category($post->ID)[0]->cat_ID; // 获取当前页码,默认显示第1页 $paged = get_query_var('paged') ? get_query_var('paged') : 1; // 用WP_Query替代get_posts,原生支持分页逻辑 $custom_query = new WP_Query(array( 'posts_per_page' => 16, 'paged' => $paged, // 传递当前页码,让查询知道该加载哪一页的内容 'category__not_in' => array($current_cat), // 修正参数拼写错误 'post_status' => 'publish', 'order' => 'ASC' )); $display = ''; if ($custom_query->have_posts()) { while ($custom_query->have_posts()) { $custom_query->the_post(); $city_name = get_field("city-name"); // 用.=拼接内容,避免每次循环覆盖之前的结果 $display .= '<a href="' . get_permalink() . '">' . $city_name . '</a>'; } // 基于自定义查询的分页数据生成导航 the_posts_pagination(array( 'total' => $custom_query->max_num_pages, 'current' => $paged )); wp_reset_postdata(); // 重置查询上下文,避免干扰后续主循环 } return $display;
关键修改说明
- 改用
WP_Query:原生支持分页参数,能自动计算总页数和当前页的文章范围,解决重复加载第一页的问题 - 引入
$paged变量:动态获取当前页面的页码,让查询知道该加载哪一页的内容 - 修正参数拼写:
category__not_inint改为category__not_in,确保排除指定分类的逻辑生效 - 拼接内容:使用
.=替代=,保留所有文章的链接,而不是只返回最后一篇 - 传递分页上下文:给
the_posts_pagination()传入自定义查询的总页数和当前页码,确保分页导航逻辑正确 - 重置查询:用
wp_reset_postdata()替代wp_reset_query(),更贴合自定义查询的重置场景
内容的提问来源于stack exchange,提问作者yasin
相关产品推荐
相关产品推荐

