【问题标题】:Wordpress user permission to allow non admin user to access plugin contentWordpress 用户权限,允许非管理员用户访问插件内容
【发布时间】:2020-11-13 05:00:23
【问题描述】:

我需要向非管理员用户授予对 wordpress 插件(WP 预订系统)内容的访问权限,我希望用户能够访问插件内容,但不授予他完全的管理员访问权限。

我尝试了一些用户权限管理插件,但我找不到授予角色的正确权限。我认为有可能与“编辑”角色一样,我可以让用户访问“联系表格 7”插件

你有它的工具或者我需要编辑插件吗?

非常感谢您的帮助

【问题讨论】:

    标签: wordpress permissions user-permissions


    【解决方案1】:

    WP Booking System,如果您使用的是最新版本(2.0.11,无法判断旧版本),支持过滤器访问插件管理页面所需的功能名称。您只需添加一个过滤器来修改所需的功能名称即可访问此特定管理页面:

    add_filter('wpbs_menu_page_capability', 'change_wpbs_menu_capability', 10, 1);
    function change_wpbs_menu_capability( $cap ) {
      $capability_name = 'my_wpbs_capability_name'; // <- change this name to whatever you like
      return $capability_name;
    }
    

    现在,查看预订系统管理页面需要my_wpbs_capability_name 功能。您可以随意命名此功能。

    您现在使用另一个 WP 插件进行用户角色/功能编辑(例如,用户角色编辑器、PublishPress 功能)并创建一个新用户角色(或修改现有角色),但访问受限(无插件编辑、有限帖子编辑)和授予此特定用户角色my_wpbs_capability_name 功能(或您命名的任何名称)。接下来,创建一个具有此特定角色的测试用户,在隐身选项卡中登录 wp-admin 并检查该用户是否仍有太多访问权限。使用角色编辑器插件来修改角色的访问权限以符合您的要求。用户应该仍然能够看到 WP Booking System 管理页面。

    编辑: 关于您对 Google 文档截图的问题:

    1. 您将您的能力命名为“wilfried”。虽然这当然没问题,但我只是想确保我没有通过说“将此名称更改为任何..”来混淆任何人。它仍然是赋予用户角色的功能名称,而不是 WordPress 用户或角色名称。
    2. 您的代码中有错误,抱怨add_filter。这是因为我认为您尝试使用类方法。如果它确实在一个类中,则必须以不同的方式进行:
    class MyPluginClass {
      // ...
    
      // make this function static:
      public static function change_wpbs_menu_capability( $cap ) {
        $capability_name = 'my_wpbs_capability_name'; // <- change this name to whatever you like
        return $capability_name;
      }
    
      // this also has to be static:
      public static function hooks() {
        // the function reference must be an array of class, method name:
        add_filter('wpbs_menu_page_capability', [self::class, 'change_wpbs_menu_capability'], 10, 1);    
      }
    }
    
    // call the static hooks method to register your filter:
    MyPluginClass::hooks();
    

    确保在类定义之后调用hooks 函数(或任何你命名的函数)。 使这些方法static 不是唯一的方法,但在这种情况下它更加一致。如果您创建了多个 MyPluginClass 的实例,则只需注册一个过滤器方法(而不是为每个实例添加一个过滤器 - 在这种情况下这是无用的)。

    【讨论】:

    • 您好,非常感谢您的回答,这已经非常有帮助了 :) 我可以在 wordpress 的侧栏中显示 WP Booking 菜单,但是我无法访问插件内容。我试图将代码放在看起来不错的不同地方,但我想我错过了一些东西。这是一个显示屏幕截图的 google word doc:docs.google.com/document/d/… 简而言之,我试图将代码放在我在代码中找到的“add_filter”部分旁边;并在代码中的“功能”部分旁边。不知道现在该尝试什么..
    • 我在上面编辑了我的帖子 - 希望这能回答你所有的问题。
    • 如果我坚持您提出的第一个解决方案,您应该在哪里添加代码以使其正常工作?即使我对代码的构造有点了解,我也不是很了解 PHP。当您说“这是因为我认为您尝试使用类方法”时,实际上我并没有故意这样做 :) 关于名为“wilfried”的功能,它确实是赋予用户的“编辑器”角色中的功能(我已将它的屏幕截图添加到谷歌文档中)
    • 我问过一个比我更懂 PHP 的朋友,代码是否正确实现,尽管看到菜单“WP 预订”,我们仍然得到“无法向 WP 预订系统收费”在wordpress中。也许代码只是访问菜单而不是插件内容?这是我们尝试过的新更新和角色设置。谢谢,如果你看到一个解决方案,但仍然感谢:) docs.google.com/document/d/…
    猜你喜欢
    • 1970-01-01
    • 2014-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多