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

WP_Query首页分页不显示,手动访问page/2正常,求代码排查

解决WP_Query静态首页分页控件不显示的问题

嘿,我一眼就揪出了你代码里的核心问题——这是静态首页自定义查询分页的典型踩坑点!

问题根源

你当前用get_query_var('page')来获取分页参数,但在使用自定义模板的静态首页中:

  • page是WordPress用来标识静态页面子页面的参数,根本不是文章分页的专用参数
  • 文章分页的正确参数是paged
  • 手动输入page/2能加载纯属巧合:你把page的值传给了paged参数,刚好匹配了分页需求,但WordPress的分页控件不会识别这个错误关联,所以控件完全生成不出来。

修复步骤

1. 修正分页参数的获取逻辑

把你代码里的$paged定义替换成以下代码,兼容静态首页和博客列表页的分页场景:

// 优先获取文章分页专用的paged参数
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
// 静态首页下如果paged为空,再用page参数做兜底(避免极端场景)
if (is_front_page() && !$paged) {
    $paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
}

2. 让分页控件绑定自定义查询的分页数据

因为你用了自定义的WP_Query($args),默认的paginate_links()会调用全局$wp_query的分页信息,导致控件生成错误。必须手动指定分页的总页数:

// 输出完文章列表后,添加修复后的分页控件
echo paginate_links(array(
    'base'         => get_pagenum_link(1) . '%_%',
    'format'       => '/page/%#%',
    'current'      => max(1, $paged),
    'total'        => $loop->max_num_pages, // 关键:使用自定义查询的总页数
    'prev_text'    => __('« 上一页'),
    'next_text'    => __('下一页 »'),
    'type'         => 'list'
));

3. 完整修正后的代码片段

<?php
/**
 * Template Name: Frontpage
 *
 * @package Bootstrap Canvas WP
 * @since Bootstrap Canvas WP 1.0
 */
get_header(); 

// 修正分页参数获取逻辑
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
if (is_front_page() && !$paged) {
    $paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
}

$args = array(
    'post_type' => 'post',
    'orderby' => 'ASC',
    'paged' => $paged,
    'posts_per_page' => 9 
); 
$loop = new WP_Query($args);

// 输出文章列表
if ($loop->have_posts()) :
    while ($loop->have_posts()) : $loop->the_post();
        // 这里放你的文章内容模板代码
        the_title('<h2 class="post-title">', '</h2>');
        the_excerpt();
    endwhile;

    // 输出修复后的分页控件
    echo paginate_links(array(
        'base'         => get_pagenum_link(1) . '%_%',
        'format'       => '/page/%#%',
        'current'      => max(1, $paged),
        'total'        => $loop->max_num_pages,
        'prev_text'    => __('« 上一页'),
        'next_text'    => __('下一页 »'),
        'type'         => 'list'
    ));

    wp_reset_postdata(); // 必须重置查询,避免影响后续全局内容
else :
    echo '<p class="no-posts">暂无文章</p>';
endif;

get_footer();
?>

额外注意事项

  • 自定义查询结束后一定要调用wp_reset_postdata(),避免后续WordPress函数使用错误的查询上下文
  • 如果你的主题有自定义分页函数,也要确保它使用$loop->max_num_pages而非全局的$wp_query->max_num_pages

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:13:51