WordPress4.7增加文章模板以支持更多文章类型

WordPress在4.7版本之前,可以为文章类型“页面”设置特定的模板,其他文章类型想要使用特定的模板,只能依靠代码或插件来实现。此次WordPress 4.7版本的模板功能更加灵活,更新增加了文章模板功能,可以方便的更多文章类型指定特定的模板。

WordPress 文章模板使用方法

先来看看模板文件头部包含的两个参数,如下:

<?php 
/*
Template Name: Full-width layout
Template Post Type: post, page, event
*/
// Page code here...

这是模板文件固定的头部参数,如此便可以在后台 post(文章)、page(页面)、event(事件)、product(产品)等各文章类型中选择使用名称为 Full-width layout(全宽布局)的文章模板。

WordPress4.7更新之增加文章模板

只要主题定义了一个文章使用的模板,在后台文章编辑页面就会出现 Post Attributes(页面属性)的选项框,后续 “Post Attributes” 标题还可以在注册文章类型的时候进行定义。

文章模板各版本兼容处理方案

如果你的主题公开给更多的同学使用,那么就要考虑WordPress 4.7之前的版本会忽略其中的 Template Post Type 参数,这时可能仅支持 post 或 product 的模板都会显示在“页面”类型的文章中,因此使用 theme_{$post_type}_templates 过滤器,把仅支持 post 或 product 的模板排除在外,这样才能兼容更多的Wordpress版本。

参考一段示例代码,以 page 为例:

/**
 * Hides the custom post template for pages on WordPress 4.6 and older
 *
 * @param array $post_templates Array of page templates. Keys are filenames, values are translated names.
 * @return array Filtered array of page templates.
 */
function makewp_exclude_page_templates( $post_templates ) {
	if ( version_compare( $GLOBALS['wp_version'], '4.7', '<' ) ) {
		unset( $post_templates['templates/my-full-width-post-template.php'] );
	}
	
	return $post_templates;
}

add_filter( 'theme_page_templates', 'makewp_exclude_page_templates' );

上述代码中的 theme_page_templates 是 theme_{$post_type}_templates 过滤器的一个示例。其中 $post_type 是模板支持的文章类型,比如 theme_product_themplates 表示过滤 product 文章类型的模板。

了解 WordPress 4.7 文章模板功能更多信息:

https://developer.wordpress.org/themes/template-files-section/page-templates/

https://core.trac.wordpress.org/ticket/18375