显示自定义帖子类型 - 模板和查询
已发表: 2016-09-26这是我们关于自定义帖子类型 (CPT) 的系列文章的第 3 篇也是最后一篇文章。 我们在前两个中讨论的主题是:
- 自定义帖子类型(如何创建它们)
- 自定义分类法
在第一篇和第二篇文章中,我们注册了testimonials自定义帖子类型和testimonial_service自定义分类。 我们现在必须在我们的网站上显示推荐。 因此,我们将看看如何为我们的推荐创建模板,如何查询它们,以及如何在我们网站的任何位置显示它们。
默认自定义帖子类型模板
我们创建了我们的 CPT,参数has_archive
设置为 true,它将在存档页面中显示所有推荐。
WordPress 使用模板层次结构来显示不同类型的内容。 对于自定义帖子类型,它将查找:
存档-{post_type}.php
单{post_type}.php
如果主题中没有定义这些模板,那么它将寻找通用模板:
存档.php
单.php
如果连这些模板都没有定义,那么它将默认为index.php模板。
在我们的例子中,Shaka 主题有single.php ,但没有archive.php模板。 这意味着默认情况下,它将使用single.php模板作为单个推荐页面。 它还将使用index.php模板在推荐档案页面中显示所有推荐。
推荐将显示在推荐存档页面中,该页面将位于此页面上:
http://your-domain-goes-here.com/ ?post_type=testimonials
如果您启用了漂亮的永久链接,那么您还可以使用以下 URL 访问该页面:
http://your-domain-goes-here.com/推荐
(注意:如果漂亮的永久链接不适合您,请转到 wp-admin -> Settings -> Permalinks 并按照您想要的方式进行设置并保存设置)
首先,我们应该在新注册的 CPT Testimonials中写一些推荐,所以我们有一些数据要显示。 我添加了 3 个推荐,这是推荐存档页面的默认布局在我们的 Shaka 主题上的外观:
如您所见,布局还可以,但不需要显示的某些数据,例如“作者”和日期。 也不显示 testimonial_service 自定义分类,因此我们将在自定义模板中添加它。
为我们的 CPT 创建自定义模板
如上一节所述,我们必须创建两个模板。 archive-testimonials.php和single-testimonials.php 。 我们将只为本示例创建archive-testimonials.php模板。
我们应该在子主题中创建这些文件,但为了简单起见,我将直接在 Shaka 主题中添加archive-testimonials.php文件。 我将复制 index.php 文件作为起点,并将其重命名为archive-testimonials.php 。
我删除了“作者”、日期代码和侧边栏。 我添加了特色图片和推荐服务自定义分类。 我使用了the_terms
WP 函数,它显示了特定 WP 术语的列表,在我们的例子中是自定义分类法。

我知道从美学角度来看,它看起来并不出色,但这不是重点。 我们想用不同的数据创建推荐档案页面的不同结构/布局,这在几分钟内就实现了。
我们也可以对单个推荐页面执行相同的操作。 我们将复制single.php文件并将其重命名为single-testimonials.php并从那里更改代码。
我没有在这里展示任何代码,因为每个主题的代码示例会有所不同,并且需要一些 HTML 和 PHP 的基本知识来编写模板。 但是修改现有模板总是更容易,这就是我们使用 index.php 作为起点的原因。
查询自定义帖子类型
在您的网站上显示自定义帖子类型的另一种方法是使用 WP_Query 类来获取自定义帖子类型(循环并显示它们)。
假设您要构建一个在轮播中显示所有推荐的小部件。 或者,您希望在单个推荐页面上显示相关推荐(相同的推荐服务分类)。 您将使用WP_Query
类来检索相关推荐。
在我们的示例中,我们将获取“潜水”推荐服务自定义分类中的所有推荐,并将它们输出到一个列表中:
<?php $args = array( 'post_type' => 'testimonials', 'post_status' => 'publish', 'tax_query' => array( array( 'taxonomy' => 'testimonial_service', 'field' => 'slug', 'terms' => 'diving' ) ) ); $testimonials = new WP_Query( $args ); if( $testimonials->have_posts() ) : ?> <ul> <?php while( $testimonials->have_posts() ) : $testimonials->the_post(); ?> <li><?php printf( '%1$s - %2$s', get_the_title(), get_the_content() ); ?></li> <?php endwhile; wp_reset_postdata(); ?> </ul> <?php else : esc_html_e( 'No testimonials in the diving taxonomy!', 'text-domain' ); endif; ?>
正如您在上面的代码中看到的,我们首先准备参数设置数组,稍后在WP_Query
初始化中使用。 在这个数组中,我们定义检索:
- `推荐` CPT,
- 仅获取已发布的推荐,
- 仅获取潜水自定义分类法“testimonial_service”中的推荐信。
当调用new WP_Query
时,会检索相关的推荐,我们可以遍历它们。 在循环中,我们只是在一个简单的列表中输出标题(我用它作为作者姓名)和推荐的内容。 此外,当我们使用 WP_Query 循环时,我们应该始终使用wp_reset_postdata
函数来重置回原始循环。 这将确保在我们完成自定义查询后一切正常。
这些是自定义帖子类型的基础知识,我希望您现在了解它们的工作原理。 与任何主题一样,总会有更多细节需要探讨。 我建议您阅读我们在这些示例中使用的所有函数和类的官方 WP 文档。 如果您有任何问题,请在下面的评论部分告诉我。