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参数。因此,对于上述示例,您可以为单个产品帖子及其归档创建单个acme_product.php和archive-acme_product.php模板文件。
或者,您可以在任何模板文件中使用is_post_type_archive()函数来检查查询是否显示给定帖子类型的归档页面以及post_type_archive_title()以显示帖子类型标题。
自定义帖子类型模板
- single- {post-type} .php 访问者从自定义帖子类型请求单个帖子时使用的单个帖子模板。 例如,single-acme_product.php将用于显示名为acme_product的自定义帖子类型中的单个帖子。
- archive- {post-type} .php 当访问者请求自定义帖子类型归档时,将使用归档文件类型模板。 例如,archive-acme_product.php将用于显示名为acme_product的自定义帖子类型的帖子存档。 如果archive-{post-type} .php不存在,则使用archive.php模板文件。
- search.php 搜索结果模板用于显示访问者的搜索结果。 要包含您的自定义帖子类型的搜索结果,请参阅下面的代码示例。
- index.php 如果定制帖子类型的特定查询模板(single-{post-type} .php,single.php,archive- {post-type} .php,archive.php,search.php)为 不存在。
搜索自定义帖子类型
默认情况下,搜索结果不包括自定义帖子类型内容到搜索结果中。 代码可以附加到functions.php以在搜索结果中包含CPT:
// Show posts of 'post', 'page', 'acme_product' and 'movie' post types on home page
function search_filter( $query ) {
if ( !is_admin() && $query->is_main_query() ) {
if ( $query->is_search ) {
$query->set( 'post_type', array( 'post', 'page', 'acme_product', 'movie' ) );
}
}
}
add_action( 'pre_get_posts','search_filter' );
在上面的代码中,函数search_filter挂钩在pre_get_posts上。 此功能将限制搜索结果显示帖子,页面和自定义帖子类型movie和acme_product。
参考方法
- register_post_type() : 注册一个帖子类型。
- is_post_type_archive() : 检查是否查询现有的帖子类型归档页面。
- post_type_archive_title() : 显示或检索帖子类型归档的标题。