WordPress 中的自定义帖子分页

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

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

如果您在 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/>"; }

你完成了:)

相关文章