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

如何为自定义WP_Query添加分页?求解决报错问题

解决WP_Query添加分页失败的问题

嘿,我来帮你搞定这个WP_Query分页的问题!你已经找对了方向——获取paged变量是实现分页的核心,但可能是没把它正确传入查询参数,或者没处理好分页导航的输出。咱们一步步来修改你的代码:

第一步:修正paged变量的获取

你的获取代码基本没问题,但要兼容静态首页的情况(静态首页用page而非paged作为分页参数),可以稍微调整一下:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : ( get_query_var( 'page' ) ? get_query_var( 'page' ) : 1 );

第二步:把paged参数传入WP_Query并添加分页导航

你需要把上面获取到的$paged变量添加到$args数组里,同时在循环结束后加入分页导航的代码,完整修改后的代码如下:

<?php 
// WP_Query arguments 
$args = array( 
    'post_type'      => array( 'post' ), 
    'post_status'    => array( 'publish' ), 
    'nopaging'       => false, 
    'posts_per_page' => '2', 
    'order'          => 'DESC', 
    'orderby'        => 'date',
    'paged'          => $paged, // 新增:传入分页参数
); 

// The Query 
$query = new WP_Query( $args ); 

// The Loop 
if ( $query->have_posts() ) { 
    while ( $query->have_posts() ) { 
        $query->the_post(); 
        the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h3>' ); 
        the_excerpt(); 
    } 

    // 新增:输出分页导航
    if ( $query->max_num_pages > 1 ) {
        echo '<div class="pagination">';
        echo paginate_links( array(
            'base'      => get_pagenum_link(1) . '%_%',
            'format'    => 'page/%#%/',
            'current'   => max( 1, $paged ),
            'total'     => $query->max_num_pages, // 必须用自定义查询的分页总数,别用全局$wp_query的
            'prev_text' => '&laquo; 上一页',
            'next_text' => '下一页 &raquo;',
            'type'      => 'list' // 输出为列表格式,方便后续加CSS样式
        ) );
        echo '</div>';
    }

} else { 
    // 无文章时的提示
    echo '<p>暂无文章</p>';
} 

// 恢复原始文章数据
wp_reset_postdata(); 
?>

关键注意点

  • 必须传入paged参数:如果WP_Query里没有这个参数,它永远只会加载第一页的内容,这也是很多人分页失败的核心原因
  • 用自定义查询的max_num_pages:别用全局的$wp_query->max_num_pages,因为你用的是自定义查询,全局变量对应的是主查询的分页数据,和你的自定义查询不匹配
  • 分页导航的位置:要放在循环结束后、wp_reset_postdata()之前,这样才能正常访问到$query的属性
  • 静态首页兼容:前面调整的$paged变量获取逻辑,能确保静态首页的分页也能正常工作

如果之前报错,大概率是没把paged参数传入$args,或者分页导航用了全局的分页数据导致的。按照上面的代码修改后,应该就能正常显示分页了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:33:01