You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:35:48