好的,我正在寻找最好的方法来攻击它。

我对PHP非常满意,并且可以在WordPress中使用自定义元字段创建自定义帖子类型。

这里是我正在做的是:


用户注册,默认情况下设置为
订户。
用户请求管理员授予
权限自定义帖子类型。
管理员将用户分配给另一个
权限名称,例如“商店所有者”。
用户现在可以看到自定义帖子类型
并可以对此帖子进行输入
/>类型。
用户只能查看和编辑自己的
帖子。

我需要以下方面的帮助:


如何创建一个名为“店主”的新“角色”,
如何授予该角色正确的权限,
仅查看并有权访问自定义帖子类型。
br />只允许用户查看和编辑他们自己的帖子到此自定义帖子
类型。

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

任何输入都会受到赞赏。

亲切的问候

#1 楼

使用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的新角色,并赋予其读取,edit_shopowner,delete_shopowner的功能。将用户设置为ShopOwner角色,然后使用该用户登录。该用户看不到自定义帖子类型。我错过了什么吗?

–斯科特
2011年4月12日在16:33

将其更改为edit_shopowners和delete_shopowners。 edit_shopowner和delete_shopowner是从不实际检查的元功能。当有人尝试编辑或删除特定项目时,系统会对其进行检查,并最终检查“该用户可以删除这些类型的项目吗?他们也只能删除自己的项目或其他项目吗?可以删除已发布的项目吗?”等等

– John P Bloch
2011年4月12日在16:43

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

–斯科特
11年4月12日在17:03

#2 楼

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

'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年9月13日上午11:36

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

–维克
2011-09-13 11:43



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

– Svetoslav Marinov
2015年11月4日在16:55

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

– MikeSchinkel
19-2-24在3:41



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

– MikeSchinkel
19年2月24日,下午3:51

#3 楼

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

评论


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

–斯科特
2011年4月12日下午14:09

#4 楼

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