我不太清楚如何将管理区域帖子类型的访问限制为特定的用户角色。
在我的例子中,我有一些帖子类型,比如“供应商”,我不想向“作者”展示。
默认情况下,WP允许作者浏览、添加或编辑自己的内容。但我不希望我的作者添加“供应商”或浏览其他管理员的条目。
我研究了Wordpress代码和codex:http://codex.wordpress.org/Function_Reference/register_post_type
中似乎有一个参数register_post_type( \'supplier\', $args )
, 我试图在$args中定义如下,当然还有其他变量,我认为我不需要在这里列出,因为我的帖子类型工作正常:
\'capabilities\' => array( \'edit_others_posts\' ),
\'map_meta_cap\' => true,
我还没有完全理解参数
"map_meta_cap"
- 我假设
\'edit_others_posts\'
足以阻止简单作者访问“供应商”(事实上,他们不能编辑其他人的帖子)。我对此进行了测试,但不起作用。作者仍然可以在管理区域中查看所有“供应商”内容,并添加一个供应商,就像它是一篇博客文章一样。
如何防止作者(或任何其他特定用户角色或没有特定功能的用户)访问和添加我创建的特定自定义帖子类型下的内容?
非常感谢。
最合适的回答,由SO网友:Mridul Aggarwal 整理而成
为了解决您的问题register_post_type
参数,使用capability_type
参数(&A);然后将特定功能授予用户。例如,如果设置\'capability_type\' => \'supplier\'
, 授予edit_supplier
仅限所有管理员使用
更多详细信息
capabilities
采用以下格式的功能数组
\'edit_post\' => \'edit_supplier\'
这基本上意味着无论核心代码在哪里使用edit_post
以前的功能,现在将使用edit_supplier
(你必须同意edit_supplier
包括管理员在内的所有用户都可以使用,wordpress不会为您这样做)
如果您没有提供功能阵列;map_meta_cap
则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
)