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

自定义文章类型页面WP Query分页按钮不显示及文章数量不符求助

针对自定义文章类型分页与文章数量问题的解决方案

我来帮你排查这两个WP开发中常见的小问题,咱们一步步拆解解决:

问题1:分页按钮无法显示

核心原因

你的代码里有三个关键错误导致分页失效:

  • WP_Query的字符串参数写法错误:用了数组语法的=>而非URL参数语法的=,WordPress无法正确识别post_type参数,查询逻辑出错后,分页函数无法计算总页数,自然不显示按钮。
  • $paged变量未正确初始化:WordPress不会自动定义这个变量,直接使用会导致分页参数为空,分页逻辑完全失效。
  • paginate_links未关联查询的总页数:默认情况下这个函数需要知道总共有多少页,才能生成正确的分页链接。

修复步骤

  1. 先初始化分页变量:
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
  1. 把WP_Query的字符串参数改成数组形式(更易维护且不易出错):
$catquery = new WP_Query( array(
    'post_type' => 'projects',
    'posts_per_page' => 10,
    'paged' => $paged
) );
  1. 更新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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:25:38