get_post_type_capabilities

函数


get_post_type_capabilities ( $args )
参数
  • (object)
    $args
    Post type registration arguments.
    Required:
返回值
  • (object) Object with all the capabilities as member variables.
相关
  • register_post_type()
  • map_meta_cap()
定义位置
  • wp-includes/post.php
    , line 1838
引入
3.0.0
弃用

从一个文章类型对象中建立一个具有所有帖子类型能力的对象

如果能力没有在’capabilities’参数数组中设置,或者没有提供’capabilities’参数,那么文章类型能力使用’capacity_type’参数作为基础。

capability_type参数可以选择注册为一个数组,第一个值是单数,第二个是复数,例如array(‘story, ‘stories’) 否则,复数形式的值会被加上一个’s’。注册后,capacity_type将始终是一个单数值的字符串。

默认情况下,八个键被接受为权限数组的一部分。

– edit_post、read_post和delete_post是元权限,然后根据上下文,即被编辑/阅读/删除的文章和被检查的用户或角色,一般会被映射到相应的原始权限。因此,这些能力一般不会直接授予用户或角色。

– edit_posts – 控制这个文章类型的对象是否可以被编辑。
– edit_others_posts – 控制是否可以编辑其他用户拥有的这种类型的对象。如果文章类型不支持作者,那么这将与 edit_posts 的行为类似。
– delete_posts – 控制是否可以删除这个文章类型的对象。
– publish_posts – 控制发布该文章类型的对象。
– read_private_posts – 控制是否可以读取私有对象。

这五个原始权限在核心区的不同位置都有检查。还有其他六种原始权限,除了map_meta_cap()外,没有在核心中直接引用,map_meta_cap()将上述三种元权限翻译成一种或多种原始权限,然后必须根据上下文检查用户或角色。

– read – 控制这个文章类型的对象是否可以被读取。
– delete_private_posts – 控制是否可以删除私有对象。
– delete_published_posts – 控制是否可以删除已发布的对象。
– delete_others_posts – 控制是否可以删除由其他用户拥有的对象。如果文章类型不支持作者,那么这将与delete_posts的行为类似。
– edit_private_posts – 控制是否可以编辑私人对象。
– edit_published_posts – 控制是否可以编辑发布的对象。

这些额外的权限只在map_meta_cap()中使用。因此,只有当文章类型在注册时将’map_meta_cap’参数设置为true(默认为false),它们才会被默认分配。

function get_post_type_capabilities( $args ) {
	if ( ! is_array( $args->capability_type ) ) {
		$args->capability_type = array( $args->capability_type, $args->capability_type . 's' );
	}

	// Singular base for meta capabilities, plural base for primitive capabilities.
	list( $singular_base, $plural_base ) = $args->capability_type;

	$default_capabilities = array(
		// Meta capabilities.
		'edit_post'          => 'edit_' . $singular_base,
		'read_post'          => 'read_' . $singular_base,
		'delete_post'        => 'delete_' . $singular_base,
		// Primitive capabilities used outside of map_meta_cap():
		'edit_posts'         => 'edit_' . $plural_base,
		'edit_others_posts'  => 'edit_others_' . $plural_base,
		'delete_posts'       => 'delete_' . $plural_base,
		'publish_posts'      => 'publish_' . $plural_base,
		'read_private_posts' => 'read_private_' . $plural_base,
	);

	// Primitive capabilities used within map_meta_cap():
	if ( $args->map_meta_cap ) {
		$default_capabilities_for_mapping = array(
			'read'                   => 'read',
			'delete_private_posts'   => 'delete_private_' . $plural_base,
			'delete_published_posts' => 'delete_published_' . $plural_base,
			'delete_others_posts'    => 'delete_others_' . $plural_base,
			'edit_private_posts'     => 'edit_private_' . $plural_base,
			'edit_published_posts'   => 'edit_published_' . $plural_base,
		);
		$default_capabilities             = array_merge( $default_capabilities, $default_capabilities_for_mapping );
	}

	$capabilities = array_merge( $default_capabilities, $args->capabilities );

	// Post creation capability simply maps to edit_posts by default:
	if ( ! isset( $capabilities['create_posts'] ) ) {
		$capabilities['create_posts'] = $capabilities['edit_posts'];
	}

	// Remember meta capabilities for future reference.
	if ( $args->map_meta_cap ) {
		_post_type_meta_capabilities( $capabilities );
	}

	return (object) $capabilities;
}