简介
文章格式(Post Formats) 是随着 版本 3.1 引入的一项 主题功能。文章格式是一种元数据,主题可以利用它来定制文章的展示方式。文章格式功能提供了一份标准化的格式列表,所有支持该功能的主題均可使用这些格式。主题并非必须支持列表中的每一种格式。主题甚至插件都无法引入新的格式。这种标准化既提供了众多主题之间的兼容性,也为外部博客工具以一致的方式访问此功能提供了途径。
简而言之,在使用支持文章格式的主题时,博主可以通过单选按钮列表选择文章格式,从而改变每篇文章的外观。
以旁注(Asides)为例,过去会创建一个名为“旁注”的分类,将文章分配给该分类,然后根据 post_class() 或 in_category('asides') 的样式规则进行不同显示。使用文章格式后,新方法允许主题添加对文章格式的支持(例如 add_theme_support('post-formats', array('aside'))),然后在保存文章时可以在发布元框中选择文章格式。可以使用函数调用 get_post_format($post->ID) 来确定格式,post_class() 也会生成 "format-asides" 类,用于纯 CSS 样式设置。
支持的格式
如果主题启用了支持,以下文章格式可供用户选择。
请注意,虽然实际的文章内容输入不会改变,但主题可以根据用户选择的格式以不同方式显示文章。例如,主题可以选择不显示“状态(Status)”文章的标题。具体的显示方式完全由主题决定,但这里有一些通用指南。
- aside(旁注):通常不带标题显示。类似于 Facebook 笔记更新。
- gallery(图库):一组图片。文章可能包含图库短代码并带有图片附件。
- link(链接):指向另一个站点的链接。主题可能会希望使用文章内容中的第一个
<a href="">标签作为该文章的外部链接。另一种方法是,如果文章仅由 URL 组成,则该 URL 即为链接,而标题(post_title)则是附加到该锚点的名称。 - image(图片):单张图片。文章内容中的第一个
<img>标签可被视为图片。或者,如果文章仅由 URL 组成,则该 URL 即为图片地址,而文章标题(post_title)将作为图片的 title 属性。 - quote(引用):一段引语。可能包含一个 holding 引用内容的 blockquote。或者,引语可能就是内容本身,来源/作者作为标题。
- status(状态):简短的状态更新,类似于 Twitter 状态更新。
- video(视频):单个视频或视频播放列表。文章内容中的第一个
<video>标签或 object/embed 可被视为视频。或者,如果文章仅由 URL 组成,则该 URL 即为视频地址。如果博客启用了视频支持(例如通过插件),也可能将视频作为附件添加到文章中。 - audio(音频):音频文件或播放列表。可用于播客。
- chat(聊天):聊天记录,如下所示:
John: foo
Mary: bar
John: foo 2
注意:在撰写或编辑文章时,“标准(Standard)”用于表示未指定文章格式。此外,如果指定的格式无效,则将使用标准(无格式)。
函数参考
主要函数:set_post_format()、get_post_format()、has_post_format()。
其他函数:get_post_format_link()、get_post_format_string()。
添加主题支持
主题需要在 functions.php 文件中使用 add_theme_support() 来告诉 WordPress 支持哪些文章格式,方法是指定一个格式数组,如下所示:
add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );
注意:您必须在 init 钩子被调用之前调用此函数!推荐使用 after_setup_theme 钩子。
添加文章类型支持
文章类型需要在 functions.php 文件中使用 add_post_type_support() 来告诉 WordPress 支持哪些文章格式:
// add post-formats to post\_type 'page'
add_post_type_support( 'page', 'post-formats' );
下一个示例注册自定义文章类型 my_custom_post_type 并添加文章格式支持。
// register custom post type 'my_custom_post_type'
add_action( 'init', 'create_my_post_type' );
function create_my_post_type() {
register_post_type( 'my_custom_post_type',
array(
'labels' => array( 'name' => __( 'Products' ) ),
'public' => true
)
);
}
//add post-formats to post_type 'my_custom_post_type'
add_post_type_support( 'my_custom_post_type', 'post-formats' );
或者在 register_post_type() 函数的 supports 参数数组中添加 post-formats。下一个示例与上述示例等效。
// register custom post type 'my_custom_post_type' with 'supports' parameter
add_action( 'init', 'create_my_post_type' );
function create_my_post_type() {
register_post_type( 'my_custom_post_type',
array(
'labels' => array( 'name' => __( 'Products' ) ),
'public' => true,
'supports' => array('title', 'editor', 'post-formats')
)
);
}
使用格式
在主题中,使用 get_post_format() 检查文章格式,并根据结果更改其展示方式。注意,具有默认格式的文章将返回 FALSE 值。或者使用 has_post_format() 条件标签:
if ( has_post_format( 'video' )) {
echo 'this is the video format';
}
使用格式的另一种方式是通过样式规则。主题应在包裹文章的包装代码中使用 post_class() 函数来添加动态样式类。文章格式会以这种方式添加额外的类,使用 "format-foo" 的名称。
例如,可以通过在主题的样式表中添加以下内容来隐藏状态格式文章的标题:
.format-status .post-title {
display:none;
}
建议的样式
虽然您可以按照自己的意愿对格式进行样式设计和展示,但每种格式都根据现代用法倾向于某种特定的“风格”。记住每种格式的预期用途是很重要的,因为这有助于让读者在视觉上轻松识别它们是特定类型的内容。
例如,旁注(aside)、链接(link)和状态(status)格式通常不会显示标题或作者信息。它们简单、简短且次要。旁注可能包含一两段文字,而链接可能只是一句话并包含某个 URL 的链接。链接和旁注都可能包含指向单篇文章页面的链接(使用 the_permalink()),从而允许评论,但状态格式很可能不会有这样的链接。
另一方面,图片文章通常只包含一张图片,可能附带或不附带说明/文本。音频/视频文章也是如此,只是添加了音频/视频内容。这三种类型都可以使用插件或标准的 嵌入(Embeds) 来显示其内容。它们的标题和作者信息可能也不会显示,因为内容本身可能已经一目了然。
引文格式特别适用于发布来自某人的简单引文,且不附带额外信息。如果您将引文仅放入帖子内容中,并将被引用者的姓名放入帖子标题中,那么您可以对帖子进行样式设置,使其单独显示 the_content(),但重新样式化为块引用格式,并使用 the_title() 将被引用者的姓名作为署名显示。
特别是在许多情况下,聊天可能会倾向于使用等宽字体显示。通过为 .format-chat 添加一些样式,您可以使帖子内容以等宽字体显示,或许在一个灰色背景的 div 或类似元素内部,从而在视觉上将其区分为聊天会话。
子主题中的格式
Child Themes 继承父主题定义的文章格式。在子主题中调用 add_theme_support() 来支持文章格式时,其优先级必须晚于父主题,并且将覆盖现有列表,而不是添加到其中。
add_action( 'after_setup_theme', 'childtheme_formats', 11 );
function childtheme_formats() {
add_theme_support( 'post-formats', array( 'aside', 'gallery', 'link' ) );
}
调用 remove_theme_support('post-formats') 将完全移除它。
向后兼容性
如果您的插件或主题需要与早期版本的 WordPress 兼容,您需要向 post_format 分类法添加名为 post-format-$format 的术语。例如,
wp_insert_term( 'post-format-aside', 'post_format' );
您还必须使用 register_taxonomy() 注册 post_format 分类法。