文章格式

简介

Post Formats3.1 版引入的主题功能。文章格式是一条元信息,主题可以使用它来自定义其文章的呈现方式。文章格式功能提供了可用于支持该功能的所有主题的标准化格式列表。主题不需要支持列表中的每种格式。主题甚至插件都无法引入新格式。此列表的标准化提供了众多主题之间的兼容性,并为外部文章工具以一致的方式访问此功能提供了途径。

简而言之,使用支持文章格式的主题,博主可以通过从单选按钮列表中选择文章格式来更改每篇文章的外观。

Asides为例,过去创建了一个名为 Asides 的类别,并将文章分配给该类别,然后根据post_class()in_category(‘asides’)的样式规则以不同方式显示。使用Post Formats,新方法允许主题添加对 Post Format 的支持(例如add_theme_support(‘post-formats’, array(‘aside’))),然后可以在 Publish meta 框中选择 post 格式时保存文章。get_post_format($post->ID)的函数调用可用于确定格式,并且 post_class()还将创建“format-asides”类,用于纯 css 样式。

支持的格式

如果主题支持它们,则以下文章格式可供用户选择。

请注意,虽然实际的文章内容条目不会更改,但主题可以使用此用户选择根据所选格式以不同方式显示文章。例如,主题可以不显示“状态”文章的标题。事物的显示方式完全取决于主题,但这里有一些一般准则。

  • 一边——通常没有标题。类似于 Facebook 笔记更新。
  • 画廊– 图片画廊。文章可能会包含一个画廊简码,并且会有图片附件。
  • 链接——指向另一个站点的链接。主题可能希望使用文章内容中的第一个 <a href=””> 标记作为该文章的外部链接。另一种方法可能是,如果文章仅包含一个 URL,那么这将是 URL,而标题 (post_title) 将是附加到它的锚点的名称。
  • 图像– 单个图像。文章中的第一个 <img /> 标签可以被认为是图像。或者,如果文章仅包含一个 URL,则该 URL 将是图像 URL,并且文章的标题 (post_title) 将是图像的标题属性。
  • 报价– 报价。可能会包含一个包含引用内容的区块引用。或者,引用可能只是内容,来源/作者是标题。
  • status – 一个简短的状态更新,类似于 Twitter 状态更新。
  • 视频– 单个视频或视频播放列表。文章内容中的第一个 <video /> 标签或对象/嵌入可被视为视频。或者,如果文章仅包含一个 URL,那将是视频 URL。如果文章上启用了视频支持(例如通过插件),也可以将视频作为文章的附件包含在内。
  • 音频– 音频文件或播放列表。可用于播客。
  • 聊天– 聊天记录,如下所示:
约翰:富
玛丽:酒吧
约翰:foo 2

注意:在撰写或编辑文章时,标准用于指定未指定文章格式。此外,如果指定的格式无效,则将使用标准(无格式)。

函数参考

主要函数 set_post_format() get_post_format() has_post_format()其他函数 get_post_format_link() get_post_format_string()

添加主题支持

主题需要在functions.php文件中使用add_theme_support()来告诉GeChiUI通过传递格式数组来支持哪些文章格式,如下所示:

add_theme_support('post-formats', array('aside', 'gallery'));

请注意,您必须在调用init钩子之前调用它!after_setup_theme钩子是一个很好的钩子。

添加文章类型支持

Post Types 需要在functions.php文件中使用add_post_type_support()来告诉GeChiUI支持哪些文章格式:

// 将后期格式添加到 post_type 'page'
add_post_type_support('page', 'post-formats');

下一个示例注册自定义文章类型“my_custom_post_type”,并添加文章格式。

// 注册自定义文章类型'my_custom_post_type'
add_action('init', 'create_my_post_type');
功能 create_my_post_type() {
    register_post_type('my_custom_post_type',
      大批(
        'labels' => array('name' => __('Products')),
        '公共' => 真
    )
  );
}

//将后期格式添加到 post_type 'my_custom_post_type'
add_post_type_support('my_custom_post_type', 'post-formats');

或者在函数register_post_type()中,在 ‘supports’ 参数数组中添加 ‘post-formats’。下一个例子等价于上面一个。

// 使用 'supports' 参数注册自定义文章类型 'my_custom_post_type'
add_action('init', 'create_my_post_type');
功能 create_my_post_type() {
    register_post_type('my_custom_post_type',
      大批(
        'labels' => array('name' => __('Products')),
        '公共' => 真的,
        'supports' => array('title', 'editor', 'post-formats')
    )
  );
}

使用格式

在主题中,使用get_post_format()来检查文章的格式,并相应地更改其呈现方式。请注意,默认格式的文章将返回 FALSE 值。或者使用has_post_format() 条件标签

if ( has_post_format( 'video' )) {
  echo '这是视频格式';
}

使用格式的另一种方法是通过样式规则。主题应该在文章周围的包装代码中使用post_class()函数来添加动态样式类。文章格式将导致以这种方式添加额外的类,使用“format-foo”名称。

例如,可以通过将其放入主题的样式表中来隐藏状态格式文章的文章标题:

.format-status .post-title {
显示:无;
}

建议的样式

尽管您可以对格式进行样式设置和设计,以任何您认为合适的方式显示,但每种格式都适用于特定类型的“样式”,如现代用法所决定的那样。最好记住每种格式的预期用途,因为这将使它们更容易被读者识别为特定类型的事物。

例如,旁白、链接和状态格式通常不会显示标题或作者信息。它们简单、简短、次要。旁白可能包含一两段,而链接可能只是一个句子,其中包含指向某个 URL 的链接。链接和旁边都可能有一个指向单个文章页面的链接(使用the_permalink()),因此允许评论,但状态格式很可能没有这样的链接。

另一方面,图片文章通常只包含一张图片,带有或不带有标题/文本。音频/视频文章将是相同的,但添加了音频/视频。这三个中的任何一个都可以使用插件或标准嵌入来显示其内容。也可能不会为他们显示标题和作者身份,因为内容可能是不言自明的。

报价格式特别适合发布没有额外信息的人的简单报价。如果您要将引用单独放入文章内容中,并将引用的人的姓名放入文章的标题中,那么您可以设置文章的样式以显示the_content()本身但重新设置为区块引用格式,并使用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’)会将其全部删除。

向后兼容性

如果您的插件或主题需要与早期版本的GeChiUI兼容,您需要将名为 post-format-$format 的术语添加到“post_format”分类中。例如,

gc_insert_term('post-format-aside', 'post_format');

您还必须使用register_taxonomy()注册 post_format 分类法。

源文件

  • gc-includes/post-formats.php

发表评论

您的电子邮箱不会被公开。 必填项已用*标注