register_post_type,注册帖子类型。
帖子类型可以支持任意数量的内置核心功能,例如元框,自定义字段,帖子缩略图,帖子状态,评论等。有关$supports
支持的功能的完整列表,请参见参数。
本文主要讲述以下内容:
- 提供了一个完整的注册自定义帖子的代码示例
- 对自定义帖子注册过程中的参数进行解释说明
- 展示自定义帖子的显示位置和效果
- 如果要了解其中自定义帖子文字的显示效果和位置,请移步:register_post_type 自定义帖子实例对照图
将此代码放在您使用的主题functions.php中(操作方法请移步本站:functions 添加自定义代码方法),添加自定义帖子类型“项目”,该自定义帖子的slug为“myp05”。方便对后面的内容进行理解。
<?php // 添加自定义帖子类型“项目”,该自定义帖子的slug为“myp05” add_action( 'init', 'Register_custom_post12' ); function Register_custom_post12() { $My_CPN = 'myp05';//自定义文章(帖子)名称,最多20个字符 $labels = array( 'name' => _x( '1项目', 'post type general name', '文本域'), 'singular_name' => _x( '2项目管理', 'post type singular name', '文本域'), 'menu_name' => _x( '3项目管理', 'admin menu', '文本域'), 'name_admin_bar' => _x( '4项目管理', 'add new on admin bar', '文本域'), 'add_new' => _x( '5添加项目', 'tao', '文本域'), 'add_new_item' => _x( '6添加新项目', '文本域'), 'new_item' => _x( '7新项目', '文本域'), 'edit_item' => _x( '8编辑项目', '文本域'), 'view_item' => _x( '9查看项目', '文本域'), 'all_items' => _x( '10项目列表', '文本域'), 'search_items' => _x( '11搜索项目', '文本域'), 'parent_item_colon' => _x( '12Parent :项目', '文本域'), 'not_found' => _x( '13你还没有发布项目', '文本域'), 'not_found_in_trash' => _x( '14回收站中没有项目', '文本域'), 'featured_image' => _x( '15项目特色图片', '覆盖此帖子类型的“特色图片”短语。 在4.3中添加', '文本域' ), 'set_featured_image' => _x( '16设置项目特色图片', '覆盖此帖子类型的“设置特色图片”短语。 在4.3中添加', '文本域' ), 'remove_featured_image' => _x( '17移除特色图片', '覆盖此帖子类型的“删除特色图片”短语。 在4.3中添加', '文本域' ), 'use_featured_image' => _x( '18使用此特色图片', '覆盖此帖子类型的“用作特色图片”短语。 在4.3中添加', '文本域' ), 'archives' => _x( '19项目档案', '导航菜单中使用的帖子类型档案标签。 默认为“帖子档案”。 在4.4中添加', '文本域' ), 'insert_into_item' => _x( '20插入项目', '覆盖“插入帖子” /“插入页面”短语(在将媒体插入帖子时使用)。 在4.4中添加', '文本域' ), 'uploaded_to_this_item' => _x( '21上载至此项目', '覆盖“上载至此帖子” /“上载至此页面”短语(在查看帖子中附加的媒体时使用)。 在4.4中添加', '文本域' ), 'filter_items_list' => _x( '22项目列表', '帖子类型列表屏幕上的过滤器链接标题的屏幕阅读器文本。 默认为“过滤器帖子列表” /“过滤器页面列表”。 在4.4中添加', '文本域' ), 'items_list_navigation' => _x( '23项目列表导航', '帖子类型列表屏幕上分页标题的屏幕阅读器文本。 默认为“帖子列表导航” /“页面列表导航”。 在4.4中添加', '文本域' ), 'items_list' => _x( '24管理 列表', '帖子类型列表屏幕上项目列表标题的屏幕阅读器文本。 默认为“帖子列表” /“页面列表”。 在4.4中添加', '文本域' ), ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'show_in_rest' => true,//支持古腾堡编辑器 'show_in_menu' => true, 'query_var' => true, 'rewrite' => array( 'slug' => $My_CPN ), 'capability_type' => 'post', 'menu_icon' => 'dashicons-analytics', 'has_archive' => false, 'hierarchical' => false, 'menu_position' => 1, 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' ),// ,'editor' ); register_post_type( $My_CPN, $args ); } ?>
description
- 官方解说:
- (字符串)关于帖子类型的简短描述性摘要。
- 亲测验证:
- 字符串,帖子类型的描述。在WordPress核心中任何地方都没有使用。但是,主题可以选择在帖子类型档案中显示此主题。
- 前置条件:
无
。
- 生效代码:
'description' => __( '我的帖子类型的说明', '您的帖子类型的简短描述。
此处仅作示例’),
- 实现效果:
- 无
public
- 官方解说:
- (bool)是否要通过管理界面或前端用户公开使用帖子类型。
- 虽然
$exclude_from_search
,$publicly_queryable
,$show_ui
和$show_in_nav_menus
的默认设置是从公共继承的,但每个设置都不依赖于这种关系并且控制着非常特定的意图。 - 默认为
false
。
- 亲测验证:
- 布尔值,是否要通过管理界面或前端用户公开使用帖子类型,是许多设置选项的默认值,也可以单独设置。
- 如果未设置其他参数,则public的值有助于触发publicly_queryable,exclude_from_search,show_ui和show_in_nav_menus的值。
- 其他内容来源于网络:https://jeremyfelt.com/tag/publicly_queryable/
- 前置条件:
无
。
- 生效代码:
'public' => true, // 显示
'public' => false, // 不显示
- 实现效果:

hierarchical
- 官方解说:
- (布尔)帖子类型是否是分层的(例如页面)。默认为false。
- 亲测验证:
- 布尔值,帖子类型是否允许分层帖子。
- 分层表示允许存在父/子/孙/等帖子结构,即页面;不分层即帖子。
- 默认为不分层。
- 前置条件:
无
。
- 生效代码:
'hierarchical' => false,
- 实现效果:

exclude_from_search
- 官方解说:
- (布尔)是否从前端搜索结果中排除具有这种帖子类型的帖子。默认值为$ public的相反值。
- 亲测验证:
- 布尔值,是否允许从前端搜索该帖子类型的帖子。
- 默认值为$ public的相反值。
- 前置条件:
无
- 生效代码:
'exclude_from_search'=> false,
- 实现效果:

publicly_queryable
- 官方解说:
- (布尔)是否可以作为
parse_request()
的一部分在前端对帖子类型执行查询。端点包括: * ?post_type={post_type_key}
* ?{post_type_key}={single_post_slug}
* ?{post_type_query_var}={single_post_slug}
如果未设置,则默认值继承自$public。
- (布尔)是否可以作为
- 亲测验证:
- 布尔值,暂时无法验证。
- 前置条件:
无
,但需要'show_in_menu' => true,
才能真正显示菜单。
- 生效代码:
'publicly_queryable' => true,
- 实现效果:
- 无
show_ui
- 官方解说:
- (bool)是否在管理员中生成并允许用于管理此帖子类型的UI。默认值为
$public
。
- (bool)是否在管理员中生成并允许用于管理此帖子类型的UI。默认值为
- 亲测验证:
- 布尔值,是否在后台生成默认UI,是其他几项后台显示的先决条件。默认设置值为
$public
的值。
- 布尔值,是否在后台生成默认UI,是其他几项后台显示的先决条件。默认设置值为
- 前置条件:
无
,但需要'show_in_menu' => true,
才能真正显示菜单。
- 生效代码:
'show_ui' => true,
- 实现效果:

show_in_menu
- 官方解说:
- (bool | string)在管理菜单中显示帖子类型的位置。
- 要运行,
$show_ui
必须为true
。如果为true
,则帖子类型显示在其自己的顶层菜单中。如果为false,则不显示菜单。 - 如果存在现有顶级菜单的字符串(例如“
tools.php
”或“edit.phppost_type=page
”),则帖子类型将作为该菜单的子菜单放置。默认值为$show_ui
。
- 亲测验证:
- 布尔值,是否在管理栏显示帖子类型。
- 如果先决条件
'show_ui' => false
,虽然后台不能看见菜单,但是连接仍然是可以使用的。
- 前置条件:
'show_ui' => true, // 是否在后台生成默认UI
- 生效代码:
'show_in_menu' => true,// 是否在管理菜单中显示帖子类型。
- 实现效果:

show_in_nav_menus
- 官方解说:
- (bool)使此帖子类型可在导航菜单中选择。默认值为$public。
- 亲测验证:
- 布尔值,在菜单管理中,是否列出该帖子类型的内容。即是否可以将该类型的帖子类型添加到菜单中。
- 前置条件:
无
- 生效代码:
'show_in_nav_menus' => true,
- 实现效果:

show_in_admin_bar
- 官方解说:
- (bool)通过管理栏使此帖子类型可用。默认值为$show_in_menu。
- 亲测验证:
- 布尔值,是否在管理栏显示帖子类型。即是否提供:用户可以通过 [管理栏] -> [新建] -> [自定义帖子] 快速新建帖子
- 前置条件:
'show_ui' => true, // 是否在后台生成默认UI
'show_in_menu' => true, // 是否在管理菜单中显示帖子类型
- 生效代码:
'show_in_admin_bar' => true,// 是否在管理栏 [新建] 提供 此帖子类型。
- 实现效果:

show_in_rest
- 官方解说:
- (
bool
)是否在REST API中包括帖子类型。将其设置为true
可使帖子类型在块编辑器中可用。
- (
- 亲测验证:
- 此处内容较多,且目前难以理解。
- 建议参考wordpress 官方 为自定义内容类型添加REST API支持 解说:
- 前置条件:
- 未知
- 生效代码:
'show_in_rest' => true,
- 实现效果:
- 未知
rest_base
- 官方解说:
- (字符串)更改REST API路由的基本URL。默认值为$ post_type。
- 亲测验证:
- 此处内容较多,且目前难以理解,一般与show_in_rest配合使用。
- 建议参考wordpress 官方 为自定义内容类型添加REST API支持 解说:
- 前置条件:
- 未知
- 生效代码:
未知
- 实现效果:
- 未知
rest_controller_class
- 官方解说:
- (字符串)REST API控制器类名称。默认值为“ WP_REST_Posts_Controller ”。
- 亲测验证:
- 未测试
- 前置条件:
- 未知
- 生效代码:
未知
- 实现效果:
- 未知
menu_position
- 官方解说:
- (int)帖子类型在菜单顺序中的位置。要运行,$ show_in_menu必须为true。默认为null(在底部)。
- 亲测验证:
- 表示自定义帖子的菜单在后台菜单栏出现的次序。默认在底部。
- 数字越大,其在菜单中的位置越低。
- 如果两个菜单项使用相同的position属性,则其中一项可能会被覆盖,从而仅显示一项!使用十进制代替整数值可以减少冲突的风险,例如63.3代替63。
- wordpress默认菜单次序及序号如下:
- 2仪表板
- 4个分隔符
- 5个帖子
- 10媒体
- 15个链接
- 20页
- 25条留言
- 59分隔符
- 60外观
- 65个插件
- 70个用户
- 75工具
- 80设置
- 99分隔符
- 如果还有更多项目,可以通过打印全局$ menu来读取每个项目的当前位置:
global $menu;print_r($menu);
- 前置条件:
- 无
- 默认情况下,所有新的自定义帖子类型都会显示在“评论”链接下方
- 生效代码:
'menu_position' => 1,// 出现在[仪表盘]上面
'menu_position' => 2,// 出现在[仪表盘]下面,[文章]上面
'menu_position' => 5,// 出现在[文章]下面,[页面]上面
- 实现效果:




menu_icon
- 官方解说:
- (字符串)此菜单使用的图标的URL。使用数据URI传递以base64编码的SVG,该URI的颜色将与配色方案匹配-这应以’
data:image / svg + xml; base64,
‘开头。传递Dashicons助手类的名称以使用字体图标,例如’dashicons-chart-pie
‘。传递“none
”将div.wp-menu-image
保留为空,以便可以通过CSS添加图标。默认使用帖子图标。
- (字符串)此菜单使用的图标的URL。使用数据URI传递以base64编码的SVG,该URI的颜色将与配色方案匹配-这应以’
- 亲测验证:
- 菜单图标,默认为:
null
,表示使用post
帖子类型的图钉图标。 - 更多图标可访问:https://developer.wordpress.org/resource/dashicons/
- 注意事项1:将base64编码的SVG用作menu_icon参数时,您的SVG必须具有fill属性。没有该fill属性,WordPress将无法匹配管理员配色方案。
- 菜单图标,默认为:
- 前置条件:
'show_ui' => true, // 是否在后台生成默认UI
'show_in_menu' => true, // 是否在管理菜单中显示帖子类型
- 生效代码:
'menu_icon' => 'dashicons-book-alt',// 菜单图标
- 实现效果:

capability_type
- 官方解说:
- (字符串)用于构建读取,编辑和删除功能的字符串。当使用此参数作为构造功能的基础时,可以作为数组传递以允许其他复数形式,例如array(’story’,’stories’)。默认为“ post”。
- 亲测验证:
- 暂未验证
- 如果设置
'capability_type' => 'supplier'
,则edit_supplier
仅将该功能授予所有管理员
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
capabilities
- 官方解说:
- (数组)此帖子类型的功能数组。$ capability_type默认用作构建功能的基础。参见get_post_type_capabilities()。
- 亲测验证:
capabilities
采用以下格式的一系列功能'edit_post' => 'edit_supplier'
- 这基本上意味着,无论
edit_post
以前核心代码在哪里使用功能,现在都将使用edit_supplier
(您必须向edit_supplier
包括管理员在内的所有用户授予功能,而wordpress不会为您这样做) - 如果您未提供功能数组&
map_meta_cap
为true,则wordpress将根据capability_type
提供的值生成默认功能数组,如下所示
[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_private_posts] => "delete_private_{$capability_type}s" [delete_published_posts] => "delete_published_{$capability_type}s" [delete_others_posts] => "delete_others_{$capability_type}s" [edit_private_posts] => "edit_private_{$capability_type}s" [edit_published_posts] => "edit_published_{$capability_type}s"
{$capability_type}
您提供的值在哪里。如果map_meta_cap
为false,则wordpress将capability_type
完全忽略该参数(或说将其视为“ post”,然后使用map_meta_cap
)- 上面这几个解释,都来源于https://wordpress.stackexchange.com/questions/71046/how-to-restrict-specific-post-types-from-being-read-or-added-by-specific-user-ro
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
map_meta_cap
- 官方解说:
- (布尔)是否使用内部默认元功能处理。默认为false。
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
supports
- 官方解说:
- (数组)核心功能。
- 用作直接调用add_post_type_support()的别名。
- 核心功能包括“标题”,“编辑”,“评论”,“修订”,“引用,”,“作者”,“摘录”,“页面属性”,“缩略图”,“自定义字段”和“发布” -formats”。
- 此外,“修订”功能指示帖子类型是否存储修订,而“评论”功能指示评论计数是否将显示在编辑屏幕上。
- 也可以将功能指定为参数数组,以提供有关支持该功能的其他信息。范例:
array( 'my_feature', array( 'field' => 'value' ) )
。默认是一个包含“ title”和“ editor”的数组。
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
register_meta_box_cb
- 官方解说:
- (可调用)提供一个回调函数,用于设置编辑表单的元框。
- 在回调中执行remove_meta_box()和add_meta_box()调用。默认为null。
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
taxonomies
- 官方解说:
- (数组)分类标识符数组,将为帖子类型注册。稍后可以使用register_taxonomy()或register_taxonomy_for_object_type()注册分类法。
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
has_archive
- 官方解说:
- (bool | string)是否应该使用post类型的档案,或者如果是字符串,则使用档案。如果启用$ rewrite,将生成正确的重写规则。默认为false。
- 亲测验证:
- 官方说法中的功能,暂不知道如何验证或使用。但发现此参数影响的一个内容。
- 当
'has_archive' => true,
在 管理栏 显示 [查看文章]。如下图所示。点击后返回前台。
- 前置条件:
'public' => true, // 是否要通过管理界面或前端用户公开使用帖子类型
'show_ui' => true, // 是否在后台生成默认UI
'show_in_menu' => true, // 是否在管理菜单中显示帖子类型
'show_in_admin_bar' => true, // 是否在管理栏 [新建] 提供 此帖子类型
- 生效代码:
'has_archive' => true, // 是否在 管理栏 显示 [查看文章],点击后返回前台。
- 实现效果:

rewrite
- 官方解说:
- (bool | array) 触发对此帖子类型的重写处理。
- 为防止重写,请将其设置为false。默认值是true,使用$ post_type作为slug。
- 要指定重写规则,可以使用以下任何键传递数组:
- ‘slug’
- (字符串)自定义永久结构的子弹。默认为$post_type键。
- ‘with_front’
- (bool)永久结构是否应该以WP_Rewrite :: $front开头。默认为true。
- ‘feeds’
- (布尔)是否应为此帖子类型构建feed永久结构。默认值为$has_archive的值。
- ‘pages’
- (布尔)是否应为分页。默认为true。
- ‘ep_mask’
- (const)要分配的端点掩码。如果未指定并且设置了permalink_epmask,则继承自$permalink_epmask。如果未指定并且未设置permalink_epmask,则默认为EP_PERMALINK。
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
query_var
- 官方解说:
- (string | bool)设置此帖子类型的query_var键。
- 默认为$ post_type键。如果为false,则无法以?{query_var} = {post_slug}加载帖子类型。
- 如果指定为字符串,则查询?{query_var_string} = {post_slug}将有效。
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
can_export
- 官方解说:
- (布尔)是否允许导出此帖子类型。默认为true。
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
delete_with_user
- 官方解说:
- (bool)删除用户时是否删除此类型的帖子。
- 如果为true,则在删除用户时,属于该用户的此类型的帖子将移至“已删除邮件”。
- 如果为假,则属于*该用户类型的帖子将*不会*被删除或删除。
- 如果未设置(默认设置),则如果post_type_supports(’author’)会删除帖子。否则,帖子不会被删除或删除。默认为null。
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
_builtin
- 官方解说:
- (布尔)仅供内部使用!如果此发布类型是本机或“内置” post_type,则为true。默认为false。
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
_edit_link
- 官方解说:
- (字符串)仅供内部使用!用于此帖子类型的编辑链接的URL段。默认为’post.php?post =%d’。
- 默认值:array()
- 亲测验证:
- 暂未验证
- 前置条件:
未知
- 生效代码:
未知
- 实现效果:
- 未知
[…] 如果要了解其中自定义帖子各个参数意义和用法,请移步:register_post_type 专题研究 […]