WordPress中的帖子类型有一个功能列表,可以控制围绕它们的权限。这些是:
edit_post
read_post
delete_post
edit_posts
edit_others_posts
publish_posts
read_private_posts
read
delete_posts
delete_private_posts
delete_published_posts
delete_others_posts
edit_private_posts
edit_published_posts
create_posts
在内部,每个帖子类型都与WordPress中提供的实际功能相匹配。大多数情况下,它们都有完全相同的名称。所以
edit_posts
的能力
post
岗位类型为
edit_posts
, 而
edit_posts
的功能
page
岗位类型为
edit_pages
.
唯一的例外是create_posts
. 这是WordPress检查的帖子类型功能,以确定用户是否可以创建该类型的新帖子。它检查以下内容:
if ( current_user_can( get_post_type_object( \'page\' )->cap->create_posts ) ) {}
与其他功能不同,用于帖子和页面
create_posts
实际映射到
edit_posts
和
edit_pages
分别,不
create_posts
或
create_pages
, 这是不存在的。
所以如果你打印get_post_type_object( \'page\' )->cap->create_posts
你会发现这个值是edit_pages
, 具有该功能的用户可以看到添加新按钮。因为这是edit_pages
而不是publish_pages
, 它允许用户创建新的页面和帖子,即使他们不能发布它们,它们也会被放入待审核状态,这是你想要防止的行为。
对于自定义帖子类型,可以通过设置create_posts
在capabilities
其他论点:
register_post_type(
\'my_custom_type\',
[
\'capabilities\' => [
\'create_posts\' => \'manage_options\',
],
]
);
对于该自定义帖子类型,只有
manage_options
将能够添加新的帖子。
对于内置的帖子类型,可以使用register_post_type_args
筛选以设置此功能,但您希望默认帖子类型:
function wpse_342743_create_page_capability( $args, $post_type ) {
if ( \'page\' === $post_type ) {
$args[\'capabilities\'] = [
\'create_posts\' => \'manage_options\',
];
}
return $args;
}
add_filter( \'register_post_type_args\', \'wpse_342743_create_page_capability\', 10, 2 );
使用该代码时,只有
manage_options
将能够创建新的页面,但如果有其他内容,他们仍可以在不进行审查的情况下进行更新
edit_pages
和
publish_pages
. 您可以将此功能更改为
delete_pages
这样,只有能够删除页面的用户才能创建页面,或者您可以将自己的自定义功能传递给用户,让他们能够创建页面。