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

如何通过query_posts实现当前页与下一页帖子合并加载?

嘿,我完全懂你想要的效果——每一页都要显示当前页的10篇帖子,再加上下一页的10篇,比如第一页展示第1到20篇,第二页展示第11到30篇,以此类推对吧?咱们来调整你现有的代码实现这个需求:

首先,核心思路是:把每页获取的帖子数量改成20篇,然后通过偏移量来控制每一页的起始位置——第一页从第1篇开始(偏移0),第二页从第11篇开始(偏移10),第三页从第21篇开始(偏移20),这样每一页就能覆盖当前页+下一页的内容了。

基于你现有query_posts的修改方案

<?php
// 获取当前页码,默认是第1页
$current_page = (get_query_var('paged')) ? get_query_var('paged') : 1;

// 计算偏移量:(当前页-1)*10,确保每一页往后偏移10篇
$offset = ($current_page - 1) * 10;

// 调整查询参数:posts_per_page改为20,用offset控制起始位置
$params = array(
    'posts_per_page' => 20, // 一次取20篇,覆盖当前页+下一页
    'category_name' => 'stati',
    'offset' => $offset,
    'paged' => $current_page // 保留这个参数让分页函数识别当前页
);

// 执行查询
query_posts($params);

// 保持你原有的归档页面标记逻辑
$wp_query->is_archive = true;

// 循环输出帖子内容
if (have_posts()) :
    while (have_posts()) : the_post();
        // 这里放你的帖子模板代码,比如标题、摘要等
        the_title('<h2 class="post-title">', '</h2>');
        the_excerpt();
    endwhile;

    // 处理分页导航:需要手动计算总页数
    $total_posts = $wp_query->found_posts; // 获取分类下的总帖子数
    $total_pages = ceil($total_posts / 10); // 按每10篇一页计算总页数(而不是20)

    // 输出分页链接
    echo paginate_links(array(
        'base' => get_pagenum_link(1) . '%_%',
        'format' => 'page/%#%/',
        'current' => $current_page,
        'total' => $total_pages,
        'prev_text' => '← 上一页',
        'next_text' => '下一页 →'
    ));

else :
    echo '<p>暂无相关帖子</p>';
endif;

// 重置查询,避免影响后续内容
wp_reset_query();
?>

更推荐的方案:改用WP_Query

因为query_posts会修改WordPress的主查询,容易引发一些意想不到的问题(比如侧边栏小工具的查询出错),所以更建议用WP_Query来做自定义查询:

<?php
$current_page = (get_query_var('paged')) ? get_query_var('paged') : 1;
$offset = ($current_page - 1) * 10;

// 初始化自定义查询
$custom_query = new WP_Query(array(
    'posts_per_page' => 20,
    'category_name' => 'stati',
    'offset' => $offset,
    'paged' => $current_page
));

// 如果需要标记为归档页面(保持你的原有逻辑)
$custom_query->is_archive = true;

if ($custom_query->have_posts()) :
    while ($custom_query->have_posts()) : $custom_query->the_post();
        // 帖子模板代码
        the_title('<h2 class="post-title">', '</h2>');
        the_excerpt();
    endwhile;

    // 计算总页数
    $total_posts = $custom_query->found_posts;
    $total_pages = ceil($total_posts / 10);

    // 输出分页导航
    echo paginate_links(array(
        'base' => get_pagenum_link(1) . '%_%',
        'format' => 'page/%#%/',
        'current' => $current_page,
        'total' => $total_pages,
        'prev_text' => '← 上一页',
        'next_text' => '下一页 →'
    ));

else :
    echo '<p>暂无相关帖子</p>';
endif;

// 重置文章数据,恢复主查询的上下文
wp_reset_postdata();
?>

注意事项

  • 最后一页的处理:如果总帖子数不是10的整数倍(比如总共有25篇),最后一页会自动显示剩余的帖子,不会出现空白内容,这是正常的。
  • 自定义分页函数:如果你的主题用了自定义的分页函数,记得把里面的总页数替换成我们手动计算的$total_pages,而不是默认的$wp_query->max_num_pages(因为默认的是按20篇一页算的)。
  • 固定链接设置:确保你的WordPress固定链接设置是支持分页的(比如选择“文章名称”模式),不然分页链接可能会失效。

内容的提问来源于stack exchange,提问作者Yur375

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:22:41