register_post_type 专题研究

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,
  • 实现效果:
‘hierarchical’       => false,即帖子类型

exclude_from_search

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

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
  • 亲测验证:
    • 布尔值,是否在后台生成默认UI,是其他几项后台显示的先决条件。默认设置值为$public的值。
  • 前置条件:
    • ,但需要'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可使帖子类型在块编辑器中可用。
  • 亲测验证:
  • 前置条件:
    • 未知
  • 生效代码:
    • 'show_in_rest' => true,
  • 实现效果:
    • 未知

rest_base

  • 官方解说:
    • (字符串)更改REST API路由的基本URL。默认值为$ post_type。
  • 亲测验证:
  • 前置条件:
    • 未知
  • 生效代码:
    • 未知
  • 实现效果:
    • 未知

rest_controller_class

  • 官方解说:
  • 亲测验证:
    • 未测试
  • 前置条件:
    • 未知
  • 生效代码:
    • 未知
  • 实现效果:
    • 未知

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添加图标。默认使用帖子图标。
  • 亲测验证:
    • 菜单图标,默认为: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

  • 官方解说:
  • 亲测验证:
    • 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"
  • 暂未验证
  • 前置条件:
    • 未知
  • 生效代码:
    • 未知
  • 实现效果:
  • 未知

map_meta_cap

  • 官方解说:
    • (布尔)是否使用内部默认元功能处理。默认为false。
  • 亲测验证:
    • 暂未验证
  • 前置条件:
    • 未知
  • 生效代码:
    • 未知
  • 实现效果:
  • 未知

supports

  • 官方解说:
    • (数组)核心功能。
    • 用作直接调用add_post_type_support()的别名。
    • 核心功能包括“标题”,“编辑”,“评论”,“修订”,“引用,”,“作者”,“摘录”,“页面属性”,“缩略图”,“自定义字段”和“发布” -formats”。
    • 此外,“修订”功能指示帖子类型是否存储修订,而“评论”功能指示评论计数是否将显示在编辑屏幕上。
    • 也可以将功能指定为参数数组,以提供有关支持该功能的其他信息。范例:array( 'my_feature', array( 'field' => 'value' ) )。默认是一个包含“ title”和“ editor”的数组。
  • 亲测验证:
    • 暂未验证
  • 前置条件:
    • 未知
  • 生效代码:
    • 未知
  • 实现效果:
  • 未知

register_meta_box_cb

  • 官方解说:
  • 亲测验证:
    • 暂未验证
  • 前置条件:
    • 未知
  • 生效代码:
    • 未知
  • 实现效果:
  • 未知

taxonomies

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()
  • 亲测验证:
    • 暂未验证
  • 前置条件:
    • 未知
  • 生效代码:
    • 未知
  • 实现效果:
    • 未知

1人评论了“register_post_type 专题研究”

  1. Pingback: register_post_type 自定义帖子实例对照图 – 迷路轮回

评论区已关闭

Scroll to Top