WordPress自定义首页循环分页问题:切换页码内容重复
解决WordPress自定义首页循环的分页失效问题
嘿,我明白你现在的困扰——自定义循环能正常调取4篇文章插横幅,但分页切来切去都是一样的内容。核心问题很简单:你的自定义循环没读取当前页码参数,也没让WordPress知道总共有多少页,所以它每次都默认加载第一页。下面一步步给你搞定:
1. 先拿到当前是第几页
WordPress里分页参数分两种情况:如果你的首页是动态的(默认的最新文章首页),用paged;如果是后台设置的静态首页,就得用page参数。咱们先写一段兼容两种情况的代码,放在自定义循环前面:
// 搞定当前页码:兼容动态首页和静态首页 if ( get_query_var('paged') ) { $paged = get_query_var('paged'); } elseif ( get_query_var('page') ) { $paged = get_query_var('page'); } else { $paged = 1; // 默认第一页 }
2. 给自定义循环加上分页“指令”
你原来的WP_Query肯定没加分页参数,现在把paged和posts_per_page(就是你每页要显示的文章数,这里是4)加进去。比如你的自定义查询应该改成这样:
// 自定义查询:加入分页参数 $custom_home_query = new WP_Query( array( 'post_type' => 'post', // 你要调取的文章类型,根据需求改 'posts_per_page' => 4, // 每页4篇,和你的需求匹配 'paged' => $paged // 关键!告诉WordPress当前要加载第几页 ) );
3. 循环输出文章+横幅,别忘了重置数据
你的循环逻辑(调4篇中间插横幅)可以保留,但循环结束后一定要重置文章数据,不然会影响后续的查询(比如侧边栏的文章):
if ( $custom_home_query->have_posts() ) { $post_count = 0; while ( $custom_home_query->have_posts() ) { $custom_home_query->the_post(); $post_count++; // 输出你的文章内容,比如调用模板片段 get_template_part( 'template-parts/content', get_post_format() ); // 举个例子:在第2篇文章后插横幅 if ( $post_count === 2 ) { echo '<div class="home-banner">这里放你的横幅代码/内容</div>'; } } // 必须重置!不然后续的全局$post变量会乱掉 wp_reset_postdata(); } else { // 没有文章时的提示 get_template_part( 'template-parts/content', 'none' ); }
4. 输出能正确跳转的分页导航
最后一步,用paginate_links()生成分页按钮,这个函数得和你的自定义查询绑定,它需要知道总共有多少页才能生成正确的链接:
// 生成分页导航 $pagination_args = array( 'base' => get_pagenum_link(1) . '%_%', 'format' => 'page/%#%/', // 分页链接的格式,根据你的固定链接设置调整 'total' => $custom_home_query->max_num_pages, // 总页数,来自自定义查询 'current' => $paged, // 当前页码 'prev_next' => true, 'prev_text' => __('« 上一页'), 'next_text' => __('下一页 »'), 'type' => 'list', // 生成<ul>格式的分页,方便CSS样式 'mid_size' => 2, // 当前页码前后显示几个页码 ); echo paginate_links( $pagination_args );
几个要注意的点
- 如果你用的是静态首页,一定要确认后台「设置-阅读」里的“首页显示”设置正确,前面的代码已经兼容了动态/静态首页的页码问题。
- 绝对不要用
query_posts()来做自定义循环,它会破坏主查询,导致各种奇怪的问题,WP_Query才是正确的选择。 - 如果分页链接的格式不对(比如跳转到错误的URL),可以调整
base和format参数,比如你的固定链接是/%category%/%postname%/,base可以改成%_%。
这样改完之后,你的分页切换就能正确加载对应页码的内容了,试试吧!
内容的提问来源于stack exchange,提问作者beluoso
相关产品推荐
相关产品推荐

