WordPress 中的自定义帖子分页

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观

如果您在 WordPress 中处理大量自定义帖子并且您是主题开发人员,那么这对您来说可能是一个众所周知的问题。很多人在不同的论坛上讨论这个分页的事情。但是,对自定义帖子进行分页实际上并不难。让我们看看如何轻松地做到这一点。

查询 CPT

这是您需要做的第一件事,就是编写自定义查询。因为当您的收藏中有一堆帖子时,您将开始考虑分页。所以是时候找一些帖子了。下面的代码会找到帖子类型 book 的所有帖子并显示它们的标题


 $books = new WP_Query( array(
"posts_per_page" => - 1,
"post_type" => "book"
) );

while ($books->have_posts()){ $books->the_post(); the_title(); echo "<br/>"; }

现在您可能会使用旧的 next_posts_link() 来显示下一页。好吧,那是行不通的,因为此时 next_posts_link() 不知道那里有多少页。因此,要使其正常工作,您必须传递查询找到的总页数。请问这个总页数是怎么计算的?


 $books = new WP_Query( array(
"posts_per_page" => - 1,
"post_type" => "book"
) );

while ($books->have_posts()){ $books->the_post(); the_title(); echo "<br/>"; }

有趣的是,您不需要像这样计算总页数。 WP_query 对象已经为您做了这件事,并通过 max_num_pages 属性使其可用。


 $books = new WP_Query( array(
"posts_per_page" => - 1,
"post_type" => "book"
) );

while ($books->have_posts()){ $books->the_post(); the_title(); echo "<br/>"; }

现在我们需要该值来显示到下一页的链接。像这样将它传递给 next_posts_link()


 $books = new WP_Query( array(
"posts_per_page" => - 1,
"post_type" => "book"
) );

while ($books->have_posts()){ $books->the_post(); the_title(); echo "<br/>"; }

现在它将显示一个有效链接,可以将您带到以前的帖子页面。如果你的 url 是 http://yoursite.com/books/ 那么之前帖子的链接将是这种格式 http://yoursite.com/books/page/2 。因此,您将需要在 PHP 脚本中使用此页码来从该页面获取所有帖子(或 CPT)。在您的主题中,您可以使用名为 paged 的​​查询变量获取此页码。以下代码将正确获取当前页码


 $books = new WP_Query( array(
"posts_per_page" => - 1,
"post_type" => "book"
) );

while ($books->have_posts()){ $books->the_post(); the_title(); echo "<br/>"; }

要从此页面获取所有帖子,您只需要像这样重写 WP_Query


 $books = new WP_Query( array(
"posts_per_page" => - 1,
"post_type" => "book"
) );

while ($books->have_posts()){ $books->the_post(); the_title(); echo "<br/>"; }

如果您想使用页码查看传统分页,则必须使用以下代码


 $books = new WP_Query( array(
"posts_per_page" => - 1,
"post_type" => "book"
) );

while ($books->have_posts()){ $books->the_post(); the_title(); echo "<br/>"; }

你完成了:)