文章格式

文章格式是主题用来以不同格式展示不同风格的文章。文章格式功能提供了一个标准化的格式列表,所有支持该功能的主题都可以使用。一个主题可能不支持列表中的每一种格式,在这种情况下,向用户说明这一点是很好的形式。

一个主题不能引入不在标准化列表中的格式,即使是通过插件。这种标准化确保了主题之间的兼容性,并为外部工具以一致的方式使用该功能提供了途径。

简而言之,对于一个支持 "文章格式" 的主题,博主可以通过选择 "文章格式" 来改变文章的外观。

以Asides为例,以前的做法是,创建一个名为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将是图像URL,而文章的标题(post_title)将是图像的title属性。
  • quote – 一个引语,可能会包含一个blockquote,或只是内容,以来源、作者作为标题。
  • status – 一个简短的状态更新,类似于Twitter的状态更新。
  • video – 单视频,文章内容中的第一个<video />标签或object/embed可被视为视频。或者,如果文章只由一个URL组成,这将是视频的URL。如果在博客上启用了视频支持(如通过插件),也可以将视频作为文章的附件。
  • audio – 音频文件,可用于播客。
  • chat – 聊天记录,像这样:
John: foo
Mary: bar
John: foo 2
当编写或编辑文章,"标准"表示没有指定文章格式。另外,如果指定了无效的格式,"标准"(无格式)将被默认应用。

 

函数参考

 

主函数

 

其他函数

 

添加主题支持

主题需要在functions.php文件中用add_theme_support()函数传递一个格式数组告诉WordPress支持那些文章格式,像这样:

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某个文章类型是否启用文章格式支持:

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’

$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() 条件标签

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格式很可能没有这样一个链接。

另一方面,图片文章通常只包含一张图片,也可能搭配标题或文字描述。音频/视频文章将是相同的,加入了音频/视频。这三者中的任何一个都可以使用插件或标准的嵌入标签来显示其内容。标题和作者也可能不显示,因为内容可能是不言自明的。

引用格式特别适合于发布没有额外信息的某个人的简单引用。如果你把这句话单独放在文章的内容中,并把被引用者的名字放在文章的标题中,那么你可以把文章的样式改为显示the_content()本身,但重新设计成blockquote格式,并使用the_title()把被引用者的名字作为标题显示。

特别是聊天,在很多情况下可能会倾向于单行字体的显示。在.format-chat上做一些样式设计,你可以让它用单行字体显示文章的内容,也许在一个灰色背景的div或类似的地方,从而在视觉上将其区分为一个聊天会话。

 

在子主题中的格式

子主题继承了父主题所定义的文章格式,在子主题中为文章格式调用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’)将移除所有格式支持。