自定义文章类型页面WP Query分页按钮不显示及文章数量不符求助
针对自定义文章类型分页与文章数量问题的解决方案
我来帮你排查这两个WP开发中常见的小问题,咱们一步步拆解解决:
问题1:分页按钮无法显示
核心原因
你的代码里有三个关键错误导致分页失效:
- WP_Query的字符串参数写法错误:用了数组语法的
=>而非URL参数语法的=,WordPress无法正确识别post_type参数,查询逻辑出错后,分页函数无法计算总页数,自然不显示按钮。 $paged变量未正确初始化:WordPress不会自动定义这个变量,直接使用会导致分页参数为空,分页逻辑完全失效。paginate_links未关联查询的总页数:默认情况下这个函数需要知道总共有多少页,才能生成正确的分页链接。
修复步骤
- 先初始化分页变量:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
- 把WP_Query的字符串参数改成数组形式(更易维护且不易出错):
$catquery = new WP_Query( array( 'post_type' => 'projects', 'posts_per_page' => 10, 'paged' => $paged ) );
- 更新
paginate_links,传入总页数参数:
echo paginate_links( array( 'prev_text' => '<span>Previous Page</span>', 'next_text' => '<span>Next Page</span>', 'total' => $catquery->max_num_pages // 关联当前查询的总页数 ) );
问题2:设置posts_per_page=10但仅显示8篇文章
核心原因
最可能的问题还是WP_Query参数写法错误:你用了post_type=>projects这种数组语法写在字符串里,WordPress无法识别这个参数,导致查询的是默认的post类型而非自定义的projects类型,而你的默认文章恰好只有8篇。
如果修复参数后仍有问题,可以排查:
- 是否有插件/主题的
pre_get_posts钩子修改了posts_per_page的值 - 是否有
projects类型的文章被设置为私密/草稿状态,这类文章不会被前台查询到
修复步骤
就是上面提到的,把WP_Query的参数改成数组形式,确保post_type被正确识别,这样就能查询到所有projects类型的公开文章,数量会符合posts_per_page=10的设置。
完整修正后的代码
<?php get_header(); ?> <?php $backgroundImg = wp_get_attachment_image_src( get_post_thumbnail_id($post->ID), 'full' );?> <div class="container-fluid p-0 pagewrap pagehead position-relative d-table" id="recent-projects"> <div class="container pageintro"> <div class="row"> <div class="col-12"> <h1>Recent Projects</h1> <p>View our recent project case studies below</p> </div> </div> </div> </div> <div class="container-fluid pt-5 pb-2"> <div class="container"> <div class="row"> <?php // 初始化分页变量 $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; // 使用数组形式的WP_Query参数,避免语法错误 $catquery = new WP_Query( array( 'post_type' => 'projects', 'posts_per_page' => 10, 'paged' => $paged ) ); ?> <?php while($catquery->have_posts()) : $catquery->the_post(); ?> <div class="col-md-6"> <div class="grid"> <figure class="effect-oscar"> <?php the_post_thumbnail('large', array('style' => 'width: 100%; height: 200px; margin: 0px auto 15px auto;')) ?> <figcaption> <div class="m-auto"> <h2><span class="post-date"><?php echo get_the_date(); ?></span><?php the_title(); ?></h2> <p><span><?php the_excerpt(); ?></span></p> <a href="<?php the_permalink(); ?>">Read Post</a> </figcaption> </figure> </div> </div> <?php endwhile; ?> <?php wp_reset_postdata(); // 重置查询,避免影响后续全局查询 ?> </div> </div> <div class="pagination-nav text-center m-auto d-block p-4 mx-auto my-4"> <?php echo paginate_links( array( 'prev_text' => '<span>Previous Page</span>', 'next_text' => '<span>Next Page</span>', 'total' => $catquery->max_num_pages ) ); ?> </div> </div> <?php get_footer(); ?>
额外提醒:记得在循环结束后加上wp_reset_postdata();,避免自定义查询影响后续的全局WordPress查询(比如侧边栏的文章列表)。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

