允许自定义角色用户编辑分配给他们的帖子,但不允许他们创建新的自定义类型帖子

时间:2019-10-28 作者:Johnx

请不要将此标记为已提出的问题,因为我已经搜索了所有问题,但没有一个给出明确的答案。

因此,我通过Members插件创建了一个自定义角色,我希望具有自定义角色“Society Manager”的用户只编辑自定义帖子类型的帖子,不要让他们创建新的帖子。管理员仍应被允许创建新帖子。

我见过其他人使用css/html和Jquery删除Add New按钮,但这不是一个好的选择。问题是我没有在Members插件中看到create\\u posts选项。那么谁能帮我详细解决这个问题呢?这是我的自定义帖子类型代码。


              register_post_type(\'society\' , array(
                \'show_in_rest\' => true,
                \'capability_type\' => \'society\',
                   \'map_meta_cap\' => true,  
                \'capabilities\' => array(
                    \'create_posts\' => \'do_not_allow\',
                ),
                \'supports\' => array(\'title\',\'thumbnail\',\'author\'),
                \'rewrite\' => array(\'slug\' => \'societies\'),
                \'has_archive\' => true,
                \'public\' => true,
                \'labels\' => array(
                    \'name\' => \'Societies\',
                    \'add_new_item\' => \'Add New Society\',
                    \'edit_item\' => \'Edit Society\',
                    \'all_items\' => \'All Societies\',
                    \'singular_name\' => \'Society\'
                ),
                \'menu_icon\' => \'dashicons-buddicons-groups\'
           ));
您可以看到,没有拒绝在members插件中创建\\u帖子的选项enter image description here

1 个回复
SO网友:Tom J Nowell

您无法找到该功能,因为它不存在。在WP开箱即用中,范例不是后期创建,而是后期发布。用户可以调整为编辑和创建草稿和挂起的帖子,但不能发布。

然而,在角色和功能级别上,将用户设置为仅编辑是不可能的,而实现这一点将是WP核心本身的大量工作。例如,如果可能的话,这将中断自动保存和修订历史记录。

此外,更新帖子与创建帖子的内部代码路径几乎相同。在以下情况下,将指定是否为post ID的重要部分wp_insert_post 被调用。

您可能可以在打开post save挂钩的过程中拦截并阻止创建post,但这可能会产生意外的连锁反应,并且UI仍然暗示可以创建post。

总结如下:

这在香草WP中是不可能的,WP本身是在假设不可能的情况下构建的,使之成为可能的是大量涉及WP核心的工作(可能是数月或数年的工作)

  • 您可以通过过滤器,但是如果有很多困难的非平凡bug,结果会很糟糕,REST API和XMLRPC可以绕过这些bugstrongly 不要再继续走这条路了,告诉他们这条路会非常昂贵,失败的几率非常高。寻找替代方案。

  • 相关推荐

    Plugin page and capabilities

    我正在开发自己的带有自定义功能的WP插件,我想在标准管理面板中显示新的子菜单everyone, 谁登录。我的代码:$capa = \'administrator\' or \'author\' or \'visitor\'; $this->pagehook = $page = add_menu_page(__(\'Myplugin\',\'my_plugin\'), __(\'Myplugin\',\'my_plugin\'),$capa, $this->page_id, array