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

WordPress自定义分类页使用query_posts分页失效问题求助

解决WordPress自定义分类页面分页失效问题

你的问题核心在于使用query_posts()时没有传递分页参数paged,导致系统无法识别当前页码,每次都返回第一页的内容。另外,query_posts()本身并不推荐用于修改主查询——它会覆盖全局的$wp_query对象,容易引发分页、模板条件判断等一系列连锁问题。下面给你两种解决方案:

方案一:使用pre_get_posts钩子(推荐)

这是WordPress官方推荐的修改主查询的方式,不会破坏全局查询结构,分页逻辑也能自然正常工作。

  1. 打开你的functions.php文件,添加以下代码:
function adjust_sport_category_query( $query ) {
    // 只在前台、主查询、且是sport分类页面时生效
    if ( ! is_admin() && $query->is_main_query() && is_category( 'sport' ) ) {
        // 这里可以设置你需要的参数,比如每页显示数量
        $query->set( 'posts_per_page', 10 );
        // 其他参数比如orderby、order等也可以在这里按需设置
    }
}
add_action( 'pre_get_posts', 'adjust_sport_category_query' );
  1. 修改你的自定义分类页面代码,直接使用默认的主查询循环即可:
<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php get_template_part( 'loop' ); ?>
<?php endwhile; else : ?>
    <p>Blank.</p>
<?php endif; ?>
<?php pagination(); ?>

方案二:修复query_posts()的分页参数(应急方案,不推荐长期使用)

如果你暂时不想改动functions.php,可以在分类页面的查询中手动添加paged参数:

<?php
// 获取当前页码,默认值为1
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
// 在query_posts中加入paged参数,让查询识别当前页码
query_posts( 'category_name=sport&paged=' . $paged );

if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    <?php get_template_part( 'loop' ); ?>
<?php endwhile; else : ?>
    <p>Blank.</p>
<?php endif; ?>
<?php pagination(); ?>

额外检查:分页函数pagination()的兼容性

如果上面的方法还是没解决问题,需要检查你的pagination()函数是否依赖全局的$wp_query->max_num_pages。如果是用query_posts(),它会替换全局的$wp_query,理论上是没问题的,但如果你的分页函数是自定义的,可能需要确保它正确获取了当前查询的总页数。比如可以修改分页函数,允许传入总页数参数:

function pagination( $total_pages = null ) {
    global $wp_query;
    // 如果没有传入总页数,就用全局查询的总页数
    $max_pages = $total_pages ? $total_pages : $wp_query->max_num_pages;
    
    // 你的分页逻辑代码...
}

然后在调用时传入总页数:

<?php pagination( $wp_query->max_num_pages ); ?>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:58:51