WordPress按ID调用多分类仅显示首个分类且页面截断的问题求助
问题根源与解决方案
嘿,我一眼就看出问题出在哪了——你重复调用WP_Query之后没有重置WordPress的全局查询状态,这就导致后续的内容都被第一个查询给“卡住”了!
为什么会出现这个问题?
每次使用WP_Query创建自定义查询并调用the_post()时,WordPress的全局$post变量会被替换成当前自定义查询的帖子对象。如果不手动重置这个状态,后续的所有查询(包括你另外两个分类的查询)和模板标签都会沿用第一个查询的上下文,不仅只会显示第一个分类的内容,还会因为全局查询状态异常,导致网站后续的内容直接被截断。
修复步骤
你需要在每一段自定义查询的结尾添加wp_reset_postdata();函数,把全局$post变量恢复到主查询的状态,让后续代码能正常运行。
正确的单段代码示例(以分类ID=1为例)
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $args = array( 'post_type' => 'post', 'post_status' => 'publish', 'cat' => '1', 'posts_per_page' => 5, 'paged' => $paged, ); $arr_posts = new WP_Query($args); if ($arr_posts->have_posts()) : while ($arr_posts->have_posts()) : $arr_posts->the_post(); ?> <div class="col-sm-12 col-md-12 col-lg-12 news-box-list mt-2 mb-2"> <div class="row align-items-center"> <div class="col-sm-12 col-md-4 col-lg-4 col-xl-4"> <?php if (has_post_thumbnail()) : ?> <a href="<?php the_permalink(); ?>" alt="<?php the_title_attribute(); ?>"> <?php the_post_thumbnail('post-thumbnail', ['class' => 'img-fluid rounded-4']); ?> </a> <?php endif; ?> </div> <div class="col-sm-12 col-md-8 col-lg-8 col-xl-8"> <p><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p> </div> </div> </div> <?php endwhile; wp_pagenavi( array( 'query' => $arr_posts, ) ); endif; // 关键:重置全局查询状态 wp_reset_postdata(); ?>
三段查询的正确写法
把上面的代码复制两次,分别修改cat参数为2和3,并且每一段的endif;后面都加上wp_reset_postdata();。这样三段查询就会独立运行,不会互相干扰,网站后续的内容也能正常加载。
额外注意事项
- 确认你的分类ID是正确的:可以在WordPress后台的“分类”页面,查看对应分类的编辑页面URL,里面的
tag_ID参数就是分类ID。 - 如果你之前考虑过用
wp_reset_query(),虽然也能重置,但更推荐wp_reset_postdata(),因为它专门用于恢复自定义查询后的全局$post变量,不会影响主查询的其他参数。
内容的提问来源于stack exchange,提问作者user19728449
相关产品推荐
相关产品推荐

