WordPress 3.1 之后,推出了一个模仿 Tumblr 的「文章形式」功能,可以让博客中除了默认的文章之外展现出更多的特殊样式。不同的文章形式,可以支持在输出时进行判断处理,以及列出存档等等……很多细心的主题里面都会加上对一些文章形式的支持,如果在面临特殊需求时,希望能够自定义专门的编辑器或者分类目录,那么还可以去注册一个自定义的文章类型。
一 内置形式
WordPress 已经内置对几种常用的文章形式的支持,如果可以满足需要,那么就不需要再重复造轮子了,只需要添加主题对已有形式的支持就好了。内置形式列表如下:
- standard – 标准,也就是默认的文章形式
- aisde – 日志,实质上就是个不显示标题的标准文章
- link – 链接,类似 Tumblr 的链接分享
- quote – 引语,展示为引用的一段文字
- status – 状态,简而言之就像是一条 Tweet
- image – 图像,发布单张图片
- gallery – 相册,也就是扩充的图像功能
- audio – 音频,……需要说吗
- video – 视频,……同上
- chat – 聊天,以专门格式显示聊天记录
如果想添加对以上形式的支持,只需要在 functions.php 里添加对应的项目即可,然后在输出文章的时候使用函数判断切换不同的样式:
// 添加对文章样式的支持,在数组中增加以上列表的类型别名即可 add_theme_support( 'post-formats', array( 'status', 'chat' ) ); // 在输出文章时,增加一个判断语句来使用不同的输出格式 // has_post_format() 函数返回判断是否是该形式的布尔值 if ( has_post_format( 'chat' )) { echo 'orzFly 22:27:28: 我勒个去我说好像在哪儿听说过三三。。'; } // get_post_format() 函数返回文章形式的别名 if ( get_post_format() == 'status' ) { echo '不愉快です。'; } // 还可以利用 post_class() 函数给每个形式输出专有类的功能,在HTML结构差异不大无需更改的情况下使用 <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
二 注册自定义类型
如果以上自带的函数无法满足贪得无厌的你的需求,除了自定义栏目以外,还可以来定制一个属于自己的文章类型。示例如下:
function custom_format() { // 文章形式设置 $args = array( 'public' => true, 'label' => '时间轴' ); // 注册文章形式函数,需要别名和设置数组两个参数 register_post_type( 'timeline', $args ); } // 添加注册动作 add_action( 'init', 'custom_format' );
至于设置的内容,这个就多了。常用的设置属性如下,是否开头的项值都是 true 或者 false:
- label – 标签,也就是文章形式的显示名称
- labels – 实际上是重命名编辑器对于该文章形式显示的界面提示文字内容,例如菜单名称或者文章保存之后的提示信息。需要传送一个数组,贴心的你一定会挨个自定义一遍,是吧……包括的数组值 id 如下:
- name
- singular_name
- menu_name
- all_items
- add_new
- add_new_item
- edit_item
- new_item
- view_item
- search_items
- not_found
- not_found_in_trash
- parent_item_colon
- description – 对文章类型的描述
- public – 是否默认公开,或者只在后台显示
- exclude_from_search – 是否从搜索中排除
- publicly_queryable – 是否可以使用 parse_request() 在前端公开查询
- show_ui – 是否在后台显示默认的管理界面
- show_in_nav_menus – 是否显示在菜单管理的添加提示里
- show_in_menu – 是否在开启 show_ui 的情况下在管理菜单中显示
- show_in_admin_bar – 是否在 Admin Bar 的新文章菜单中显示,默认同上值
- menu_position – 在管理菜单中显示的位置,使用数字指定。放上几个常用的值参考:
- 5 > n – 整个菜单的顶部
- 10 > n > 5 – 在文章和媒体菜单之间
- n > 25 – 在评论菜单之后
- n > 60 – 在第一个分隔符后
- 100 > n > 80 – 在设置菜单之后
- n > 100 – 在第二个分隔符后
- menu_icon – 菜单的图标,不指定使用一个齿轮的默认图标
- capability_type – 编辑模式,可以指定如下值:
- post – 文章,默认的文章编辑器
- page – 页面
- attachment – 附件
- mediapage – 媒体页面
- capabilities – 最强大也是最复杂编辑器设置。传入的值是一个数组,一般来说就用到其中的七个数组,也可以用到扩展的更多项,对其设置可以完全自定义其编辑页面:
- edit_post, read_post, delete_post – 编辑,读取,删除操作
- edit_posts – 文章编辑器
- edit_others_posts – 编辑非用户所有的文章时的编辑器
- publish_posts – 文章公共项目的管理
- read_private_posts – 可以被读取的私有项目
- 非核心的扩展项目不再叙述。
- 一个示例如下,注意一些值上面需要在末尾添加「s」,具体的定义已经是非常高级的应用,这里也不叙述了:
[cap] => stdClass Object ( [edit_post] => "edit_{$capability_type}" [read_post] => "read_{$capability_type}" [delete_post] => "delete_{$capability_type}" [edit_posts] => "edit_{$capability_type}s" [edit_others_posts] => "edit_others_{$capability_type}s" [publish_posts] => "publish_{$capability_type}s" [read_private_posts] => "read_private_{$capability_type}s" [delete_posts] => "delete_{$capability_type}s" [delete_published_posts] => "delete_published_{$capability_type}s" [edit_private_posts] => "edit_private_{$capability_type}s" )
- map_meta_cap – 是否使用内置的 meta 映射
- hierarchical – 是否支持排序,类似于页面的排序值功能。因为需要将所有条目取出进行计算顺序,假如应用了排序文章太多可能导致性能问题
- supports – 最常用的支持设置,可以定义支持编辑器的哪些项目。值如下:
- title – 标题
- editor – 富文本编辑器
- author – 选择作者
- thumbnail – 特色图像,也就是缩略图
- excerpt – 摘要
- trackbacks – Trackback 引用支持
- custom-fields – 自定义栏目
- comments – 评论
- revisions – 修订记录
- page-attributes – 页面层级 类似页面编辑中的父页面
- post-formats – 文章形式选择
- register_meta_box_cb – 是否建立 meta box 的回调函数
- taxonomies – 文章形式的分类法,需要和 register_taxonomy() 函数配合使用
- has_archive – 是否拥有该分类目录的存档页面
- permalink_epmask – 是否重新端点的位掩码,抱歉我没看懂这个……
- rewrite – 地址重写设置,需要传入数组。值如下:
- slug – 重写中的目录别名,效果大概是 /post-slug/1 这样
- with_front – 是否在链接前遵循其他的前缀,还是直接在根域名重写
- feeds – 是否在文章 feed 流中显示
- pages – 是否提供分页
- query_var – 自定义查询值,比如文章查询值是 /?p=[POST_ID] ,可以给文章类型自定义一个查询别名或者 false 沿用默认
- can_export – 是否支持导出功能
Orz终于明白那些形式是干啥的了…..【虽然还是有点懵…
感觉太高深,看的云里雾里
请问,想在编辑页面显示 tags 的话,怎么设定呢?
很高大上,正在捣鼓这个
非常不错,有用
13年的文章到现在还是很有用,谢了。