主题使用“帖子格式”来以特定的格式和样式展示帖子。该功能为所有支持此功能的主题提供了一套标准化的可用格式列表;并非每个主题都支持列表中的所有格式,在这种情况下,最好让用户知晓这一情况。
即使通过插件也无法引入不在标准化列表中的新格式。这种标准化确保了不同主题之间的兼容性,并允许外部工具以一致的方式使用该特性。
简而言之,对于支持帖子格式的主题,博主可以通过选择一种帖子格式来改变帖子的外观。
以旁白 (Asides)为例,在过去,会创建一个名为“旁白”的分类,并将帖子分配给该分类,然后根据 post_class() 或 in_category(‘asides’) 中的样式规则进行不同的显示。
通过帖子格式,新的方法允许主题添加对某种帖子格式的支持(例如:add_theme_support(‘post-formats’, array(‘aside’))),然后在保存帖子时可以在“发布”元框中选择该帖子格式。可以使用 get_post_format($post->ID) 函数调用来确定格式,而 post_class() 也会创建 "format-asides" 类,以便进行纯 CSS 样式设置。
支持的格式
如果主题支持的话,可以使用以下帖子格式:
请注意,虽然实际的帖子内容不会改变,但主题可以根据所选的格式以不同的方式显示帖子。帖子的显示方式完全由主题决定,但以下是针对不同帖子格式的典型用途的一般指南。
- aside(旁白) – 通常不显示标题。类似于 Facebook 的状态更新。
- gallery(图库) – 图片画廊。帖子可能包含图库短代码并拥有图片附件。
- link(链接) – 指向另一个网站的链接。主题希望使用帖子内容中的第一个 <a href=""> 标签作为该帖子的外部链接。另一种方法是,如果帖子仅由一个 URL 组成,那么这就是 URL,而标题 (post_title) 将附加到锚点的名称。
- image(图片) – 单张图片。帖子中的第一个 <img /> 标签可被视为该图片。或者,如果帖子仅由一个 URL 组成,那么这就是图片的 URL,而帖子的标题 (post_title) 将是图片的 title 属性。
- quote(引用) – 引用内容。可能包含持有引用内容的 blockquote 块。或者,引用本身可能就是内容,而来源/作者则是标题。
- status(状态) – 简短的状态更新,类似于 Twitter 的状态更新。
- video(视频) – 单个视频。帖子内容中的第一个 <video /> 标签或 object/embed 可被视为该视频。或者,如果帖子仅由一个 URL 组成,那么这就是视频的 URL。如果在博客上启用了视频支持(例如通过插件),也可能将视频作为附件添加到帖子中。
- audio(音频) – 音频文件。可用于播客 (Podcasting)。
- chat(聊天) – 聊天记录,如下所示:
John: foo
Mary: bar
John: foo 2在编写或编辑帖子时,“标准”表示未指定任何帖子格式。如果指定的格式无效,默认将应用“标准”(无格式)。函数参考
主要函数
其他函数
添加主题支持
主题需要在 functions.php 文件中使用 add_theme_support() 来告诉 WordPress 要支持的帖子格式,并像这样传递一个包含格式的数组:
<?php
function themename_post_formats_setup() {
add_theme_support( 'post-formats', array( 'aside', 'gallery' ) );
}
add_action( 'after_setup_theme', 'themename_post_formats_setup' );使用 after_setup_theme 钩子,以便在主题加载后注册帖子格式支持。
添加自定义文章类型支持
自定义文章类型需要在 functions.php 文件中使用 add_post_type_support() 来告诉 WordPress 要支持的帖子格式:
<?php
function themename_custom_post_formats_setup() {
// add post-formats to post_type 'page'
add_post_type_support( 'page', 'post-formats' );
// add post-formats to post_type 'my_custom_post_type'
add_post_type_support( 'my_custom_post_type', 'post-formats' );
}
add_action( 'init', 'themename_custom_post_formats_setup' );或者在 register_post_type() 函数中,在“supports"参数数组中添加‘post-formats’:
<?php
$args = array(
'supports' => array( 'title', 'editor', 'author', 'post-formats' ),
);
register_post_type( 'book', $args );应将 add_post_type_support 钩子绑定到 init,因为自定义文章类型可能尚未在 after_setup_theme 时注册。
使用格式
在主题中,请使用 get_post_format() 检查帖子的格式并相应地更改其呈现方式。请注意,默认格式的帖子将返回 FALSE 值。或者,可以使用 has_post_format() 条件标签:
<?php
if ( has_post_format( 'video' ) ) {
echo 'This is the video format.';
}建议的样式
另一种处理格式的方法是使用样式规则。主题应在包裹帖子的代码中使用 post_class() 函数来添加动态样式类。帖子格式将以这种方式导致额外类的添加,使用 "format-foo" 名称。
例如,可以通过将此内容放入主题的样式表中来隐藏状态格式的帖子标题:
.format-status .post-title {
display: none;
}每种格式都适合某种类型的“风格”,这由现代用法决定。在应用样式时,请记住每种格式的预期用途是很重要的。
例如,aside、link 和 status 格式简单、简短且次要。这些通常不显示标题或作者信息。Aside 可能包含一两段文字,而 link 则只是一个带有 URL 链接的句子。Link 和 aside 都可能有指向单篇帖子页面的链接(使用 the_permalink()),从而允许评论,但 status 格式很可能不会有这样的链接。
另一方面,图片帖子通常仅包含一张图片,无论是否配有说明/文本。音频/视频帖子也是如此,只是添加了音频或视频内容。这三种类型中的任何一种都可以使用插件或标准的 嵌入 (Embeds) 来显示其内容。它们的标题和作者信息也可能不显示,因为内容可能是自解释的。
引用格式特别适合发布来自某人的简单引用且没有额外信息的内容。如果您将引用单独放入帖子内容中,并将被引用者的姓名放在帖子的标题中,那么您可以对帖子进行样式设置以仅显示 the_content() 但重新设计为 blockquote 格式,并使用 the_title() 来显示被引用者的姓名作为署名。
聊天内容尤其可能会倾向于单等宽字体显示。通过一些样式设置 .format-chat,您可以使用等宽字体(例如在灰色背景 div 或类似元素内)显示帖子的内容,从而将其视觉上区分出来作为一个聊天会话。
子主题中的格式
子主题 继承父主题定义的帖子格式。在子主题中调用 add_theme_support() 以支持帖子格式必须在优先级上晚于父主题的优先级,并且将覆盖现有列表,而不是向其添加。
<?php
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’) 将完全移除它。