WordPress主题系统支持为自定义文章类型创建自定义的模板。从WordPress 3.0版本开始,就已经支持为自定义文章类型的单篇文章显示创建自定义模板,而针对归档页面显示的自定义模板支持则是在3.1版本中添加的。

自定义文章类型 – 模板层级结构

WordPress会按照模板层级结构依次查找模板,并使用最先找到的模板文件。因此,如果您想为acme_product这个自定义文章类型创建自定义模板,一个不错的开始方式是复制single.php文件,将其保存为single-acme_product.php,然后对该文件进行编辑。

不过,如果您不想创建自定义模板文件,WordPress会使用主题中已有的文件,也就是archive.php、single.php以及index.php这些文件。

单篇文章及其归档页面分别可以通过single.php和archive.php模板文件来显示,

  • 自定义文章类型的单篇文章会使用single-{post_type}.php模板
  • 而它们的归档页面则会使用archive-{post_type}.php模板
  • 如果您没有为该文章类型创建归档页面,可以传入参数BLOG_URL?post_type={post_type}

其中{post_type}指的是register_post_type()函数中的$post_type参数。

因此,对于上面的示例,您可以分别为单个产品文章及其归档页面创建single-acme_product.php和archive-acme_product.php这两个模板文件。

或者,您也可以在任何模板文件中使用is_post_type_archive()函数来检查当前查询是否对应某个给定文章类型的归档页面,同时使用post_type_archive_title()函数来显示该文章类型的标题。

自定义文章类型模板

  • single-{post-type}.php
    当访问者请求查看自定义文章类型的单篇文章时所使用的模板。例如,对于名为acme_product的自定义文章类型,显示其单篇文章时就会使用single-acme_product.php。
  • archive-{post-type}.php
    当访问者请求查看自定义文章类型的归档页面时所使用的模板。例如,对于名为acme_product的自定义文章类型,显示其文章归档时就会使用archive-acme_product.php。如果不存在archive-{post-type}.php模板,就会使用archive.php模板。
  • index.php
    当不存在针对该自定义文章类型的特定查询模板(single-{post-type}.php、single.php、archive-{post-type}.php、archive.php、search.php)时,就会使用index.php。

函数参考