IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    为 WordPress 主题添加文章形式支持和注册自定义类型

    Dimpurr发表于 2013-11-24 14:39:41
    love 0

    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 – 是否支持导出功能

    本文来自 钉子の次元 - Dimpurr - an artist, designer and developer from China. ,原文地址 为 WordPress 主题添加文章形式支持和注册自定义类型



沪ICP备19023445号-2号
友情链接