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

WordPress分页失效,始终显示同一组文章求助

解决WordPress the_posts_pagination()分页失效问题

看起来你遇到的核心问题是自定义WP_Query查询没有包含分页参数,同时替换全局$wp_query的方式干扰了分页函数的正常工作。下面是具体的修复步骤和代码:

问题分析

  1. 你的查询代码$wp_query->query('cat=-1,-4,-12')没有传递当前分页的页码(paged参数),导致每次查询都只会返回第一页的10篇文章。
  2. the_posts_pagination()默认依赖全局$wp_query的分页数据,但你重新赋值了$wp_query却没有正确初始化分页相关属性,点击分页链接后依然显示第一页内容。

修复后的代码

我们调整查询逻辑,正确传递分页参数,同时优化全局变量的使用避免冲突:

<div class="row">
    <?php
    // 获取当前分页页码,首页默认1
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;
    
    // 使用自定义查询变量,避免替换全局$wp_query
    $custom_query = new WP_Query(array(
        'cat' => '-1,-4,-12', // 排除指定分类
        'posts_per_page' => 10, // 显式指定每页10篇,避免受后台设置影响
        'paged' => $paged // 传递分页参数
    ));
    
    if ($custom_query->have_posts()) :
        while ($custom_query->have_posts()) : $custom_query->the_post();
    ?>
        <div class="col-md-12">
            <div class="single-blog-post">
                <div class="blog-post-cat"><?php the_category(', '); ?></div>
                <h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                <div class="blog-meta"><?php the_time('F j, Y'); ?> <?php the_author_posts_link(); ?></div>
                <div class="blog-details">
                    <div class="row">
                        <div class="col-md-6">
                            <div class="blog-thumbnail">
                                <?php if (has_post_thumbnail()) : ?>
                                    <?php the_post_thumbnail(); ?>
                                <?php endif; ?>
                            </div>
                        </div>
                        <div class="col-md-6">
                            <div class="blog-content">
                                <?php the_content(); ?>
                                <a href="<?php the_permalink(); ?>" class="blog-readmore">Read More</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    <?php
        endwhile;
        
        // 传递自定义查询对象给分页函数,确保分页逻辑正确
        the_posts_pagination(array(
            'query' => $custom_query,
            'mid_size' => 2, // 可选:调整分页链接显示的数量
            'prev_text' => __('Previous', 'textdomain'),
            'next_text' => __('Next', 'textdomain')
        ));
        
        wp_reset_postdata(); // 恢复全局$post变量,避免后续模板出错
    else :
        // 没有文章时的提示
        echo '<p>No posts found.</p>';
    endif;
    ?>
</div>

关键修改点说明

  • 添加paged参数:通过get_query_var('paged')获取当前页码,传递给WP_Query,确保查询对应分页的文章。
  • 使用自定义查询变量:避免直接替换全局$wp_query,减少对WordPress默认查询逻辑的干扰,同时在the_posts_pagination()中通过query参数指定我们的自定义查询对象。
  • 显式指定posts_per_page:虽然你后台设置了每页10篇,但显式指定可以确保查询逻辑不受后台设置影响,更可靠。
  • 正确重置数据:使用wp_reset_postdata()恢复全局$post变量,避免后续模板代码出现问题。

如果你坚持要替换全局$wp_query(不推荐,容易引发冲突),可以这样修改原代码:

<div class="row">
    <?php
    $temp = $wp_query;
    $wp_query = null;
    
    $paged = get_query_var('paged') ? get_query_var('paged') : 1;
    
    $wp_query = new WP_Query(array(
        'cat' => '-1,-4,-12',
        'posts_per_page' => 10,
        'paged' => $paged
    ));
    
    while ($wp_query->have_posts()) : $wp_query->the_post();
    // ... 文章循环代码不变 ...
    endwhile;
    
    the_posts_pagination();
    
    $wp_query = null;
    $wp_query = $temp;
    wp_reset_query(); // 恢复全局查询
    ?>
</div>

这种方式需要用wp_reset_query()来恢复全局$wp_query,但依然不如使用自定义查询变量稳妥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:28:03