如何修复自定义文章类型的自定义分类页面分页404问题
解决WordPress自定义分类分页404问题
1. 换掉query_posts,用pre_get_posts钩子(核心修复)
别再用query_posts修改分类归档的查询了,这玩意儿会打乱主查询的分页逻辑,是你遇到404的主要原因。直接在functions.php里加这段代码,在主查询启动前调整参数:
function custom_book_taxonomy_query( $query ) { // 只在前台、主查询、book-categories分类归档页生效 if ( ! is_admin() && $query->is_main_query() && is_tax( 'book-categories' ) ) { $query->set( 'post_type', 'book' ); $query->set( 'posts_per_page', 2 ); // 测试用,正式环境改回你要的数量 $query->set( 'orderby', 'name' ); $query->set( 'order', 'ASC' ); // 排序方向,按需调整 } } add_action( 'pre_get_posts', 'custom_book_taxonomy_query' );
然后把taxonomy.php里的循环代码简化成这样,直接用主查询的内容即可:
<?php $al_cat_slug = get_queried_object()->slug; $al_cat_name = get_queried_object()->name; ?> <div class="book-items row"> <?php if ( have_posts() ): ?> <?php while ( have_posts() ) : the_post(); ?> <div class="book-item col-12"> <a href="<?php the_permalink()?>"> <h2 class="book-title"> <?php if( get_field('catalog_order') ): ?> <span class="catalog-order"><?php the_field('catalog_order')?></span> <?php endif; ?> <?php the_title(); ?> <?php if( get_field('book_author') ): ?> <span class="book-author"> — <?php the_field('book_author')?></span> <?php endif; ?> </h2> </a> </div> <?php endwhile; ?> <?php echo the_posts_pagination(); ?> <?php endif; ?> </div>
2. 刷新固定链接
改完代码后必须刷新固定链接,不然新的重写规则不会生效:
- 进入WordPress后台 → 设置 → 固定链接
- 无需修改任何设置,直接点击「保存更改」即可。
3. 删掉没用的旧代码
你之前添加的taxonomy_rewrite_fix函数是针对catalog参数的,和你的book-categories分类完全不匹配,直接删掉就行,留着只会干扰正常规则。
4. 排查冲突(如果问题仍存在)
- 先禁用所有插件,测试分页是否正常,排除插件干扰
- 切换到默认主题(比如Twenty Twenty-Three),排查是否是主题自定义规则导致的问题
内容的提问来源于stack exchange,提问作者libertarian
相关产品推荐
相关产品推荐

