允许成员只能访问自定义帖子类型。允许仅编辑自己的帖子


29

好吧,我正在寻找最好的方法来解决这个问题。

我对PHP以及使用WordPress中的自定义元字段制作自定义帖子类型非常满意。

这是我正在做的事情:

  1. 用户注册并默认设置为订户。
  2. 管理员要求用户授予自定义帖子类型的权限。
  3. 管理员将用户分配给另一个权限名称,例如“商店所有者”。
  4. 用户现在可以看到自定义帖子类型,并且可以输入该帖子类型。
  5. 用户只能查看和编辑自己的帖子。

我需要以下方面的帮助:

  1. 如何创建一个名为“商店所有者”的新“角色”,
  2. 如何授予所述角色正确的权限以仅查看和访问自定义帖子类型。
  3. 仅允许用户查看和编辑他们自己的帖子到该自定义帖子类型。

理想情况下,我希望这一切都是通过wp-admin完成的,但是我猜测我可能需要为此构建前端才能获得我想要的有限控制权。

任何输入,不胜感激。

亲切的问候

Answers:


21

使用Justin Tadlock的插件“ Members ”。它使您能够创建新角色和编辑现有角色,以及添加自定义功能。您只需单击几下即可完成所有要做的工作。

我知道您在对ZaMoose答案的评论中说过,您正在“自己编写功能,以便对所有内容都拥有完全控制权”。这就缺少了开源软件的全部要点。贾斯汀·塔德洛克(Justin Tadlock)发布了他的插件,以便您可以精确地使用它,以便对所有内容都拥有完全的控制权。

如果你真的真的要推倒重来,可能浪费数百自己的时间小时,我不能阻止你,但你至少可以保存自己的麻烦和使用Tadlock的插件,以了解如何做你想做的。

一旦您的插件完成了您想要的工作,就需要将'map_meta_cap'标志更改为,true并将其'capability_type'标记为帖子类型注册函数,以使其显示除“ post”,“ page”或任何其他“ reserved”之外的内容类型。然后,复制所有相关的帖子(如功能edit_postsedit_others_postspublish_posts等),使用你的能力类型,而不是职位。确保将所有这些权限分配给管理员(在执行此操作之前,您将无法看到帖子类型),然后创建您的角色,模仿您的帖子类型的“贡献者”角色的功能。

例如,假设你的能力类型是foobars,你会想给“店主”的edit_foobarsdelete_foobarsread能力。这样,他们可以创建自己的草稿foobar,并删除这些草稿,但是由于它们没有publish_foobars功能,因此必须将其提交以供批准。因为它们没有edit_published_foobars,所以必须批准对批准的foobar的所有修改。


现在就可以使用Members插件了解会员权限的工作原理。我已'map_meta_cap' => true'capability_type' => 'shopowner'我的自定义后的类型。我创建了一个新角色,ShopOwner并将其赋予了read,edit_shopowner,delete_shopowner功能。将用户设置为ShopOwner角色,然后使用该用户登录。该用户看不到自定义帖子类型。我错过了什么吗?
Brady

2
将其更改为edit_shopownersdelete_shopownersedit_shopowner并且delete_shopowner是从未真正检查过的元功能。当有人尝试编辑或删除特定项目时,系统会对其进行检查,最后检查诸如“此用户可以删除这些类型的项目吗?他们只能删除自己的项目吗?还是其他人?可以删除已发布的项目?” 等
John P Bloch

我没有任何意义...但是我可以通过在自定义帖子类型中设置功能并在成员插件中创建这些功能来获得所需的功能。我给了你答案,因为你的帖子对我来说是最有用的解决方案。谢谢
Brady

19

注册站类型具有一个称为“功能”的参数,因此您可以使用例如

'capability' => 'organize_shop',

http://codex.wordpress.org/Function_Reference/register_post_type

要创建新的用户/角色/功能,可以使用add_role,add_cap作为一个简单的示例,以帮助您入门:

// Add the role to WordPress list of roles
// Then add the capability 'organize_shop' to the 'shop_owner' role
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// If 'shop_owner' already exists make `$wp_roles` visible then 
// add the capability 'organize_shop' to the 'Show Owner' role
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );

嗯...我有点困惑2和3行之间有什么区别?:S不会为“商店拥有者”角色添加相同的功能吗?
dashaluna 2011年

是的,它们是相同的,但是它们展示了差异的实现方法,第一个包括作为第一个参数的角色(Shop Owner),第二个仅包括上限,因为它使用的是$ role。
Wyck

3
您是否应该翻译能力/权限?那是 __('');
Svetoslav Marinov

@SvetoslavMarinov我编辑了答案以删除翻译。
MikeSchinkel

@dashaluna我编辑了答案以澄清它。
MikeSchinkel

1

您是否考虑过使用重力形式TDO迷你形式来处理实际的内容提交?它们各自具有的功能可以使您顺利地处理用户提交的内容。


感谢您的答复,但这些不是我想要的。主要是因为这些是插件。我希望自己编写该功能,因此可以完全控制所有内容。
Brady

0

通过安装名为“ Advance Access Manager”的插件可以轻松而有效地实现此目的,您将不必编写功能,但仍可以对用户,角色和他们的工作进行适当的控制。您想要的大多数东西都可以通过此插件实现。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.