如何限制特定用户角色读取或添加特定帖子类型(例如,作者)?

时间:2012-10-31 作者:unfulvio

我不太清楚如何将管理区域帖子类型的访问限制为特定的用户角色。

在我的例子中,我有一些帖子类型,比如“供应商”,我不想向“作者”展示。

默认情况下,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\' 足以阻止简单作者访问“供应商”(事实上,他们不能编辑其他人的帖子)。我对此进行了测试,但不起作用。作者仍然可以在管理区域中查看所有“供应商”内容,并添加一个供应商,就像它是一篇博客文章一样。

如何防止作者(或任何其他特定用户角色或没有特定功能的用户)访问和添加我创建的特定自定义帖子类型下的内容?

非常感谢。

1 个回复
最合适的回答,由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)

结束

相关推荐

Ajax for non-logged-in users

我正在开发一个插件,它可以从未登录用户(如Like按钮)捕获一些数据,并根据post\\u id将其输入数据库。我的插件对登录用户很好,但非登录用户在AJAX中会产生“-1”响应。我猜这与写入数据库的身份验证障碍有关,但我正在寻找一种解决方法。有什么想法吗?编辑:以下是代码:http://pastebin.com/ghtvJNiW我是根据Love-It AJAX plugin 皮平。他在教程中说,这只适用于登录用户,但我需要让它也适用于未登录用户。