WordPress自定义文章类型分类页面无法显示全部文章求助
问题解决方法
核心问题
你当前的pre_get_posts函数只针对了自定义文章类型的归档页(is_post_type_archive('trial')),但你访问的是自定义分类法trial-category的归档页面,这个条件不触发,所以查询还是用了WordPress默认的10篇文章限制,完全忽略了你在「设置>阅读」里的50篇设置。
修正后的函数
把你的spigot_show_all_work函数替换成下面的代码,同时覆盖CPT归档页和自定义分类页的查询:
add_action( 'pre_get_posts', 'spigot_show_all_work' ); function spigot_show_all_work( $query ) { if ( ! is_admin() && $query->is_main_query() ) { // 匹配trial的CPT归档页,以及trial-category分类法的归档页 if ( is_post_type_archive( 'trial' ) || is_tax( 'trial-category' ) ) { $query->set('posts_per_page', -1 ); // 显示所有文章 // 要是想固定显示50篇,就改成:$query->set('posts_per_page', 50 ); } } }
额外必做检查
- 刷新固定链接:改完代码后,进后台「设置>固定链接」,直接点“保存更改”刷新重写规则,避免permalink缓存导致的异常。
- 确认分类关联:检查你的
trial文章确实关联到了对应的trial-category分类下,别是未分类或者关联错了分类。 - 验证模板生效:确认当前页面用的是
taxonomy-trial-category.php模板,可以在模板顶部加一行注释<!-- 当前模板:taxonomy-trial-category.php -->,前端查看源代码确认。
备选方案(不推荐,仅应急用)
如果pre_get_posts方法还是有问题,也可以直接在taxonomy-trial-category.php里替换默认循环为自定义查询,但优先用pre_get_posts(更符合WordPress规范):
<?php $args = array( 'post_type' => 'trial', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'trial-category', 'field' => 'slug', 'terms' => get_queried_object()->slug, ), ), ); $trial_query = new WP_Query( $args ); if ( $trial_query->have_posts() ) : while ( $trial_query->have_posts() ) : $trial_query->the_post(); ?> <div class="trial-info"> <h3><a title="<?php the_title();?>" href="<?php the_permalink();?>"><?php the_title();?></a></h3> </div> <?php endwhile; wp_reset_postdata(); endif; ?>
内容的提问来源于stack exchange,提问作者Christi Yarema
相关产品推荐
相关产品推荐

