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 文档截图的问题:
- 您将您的能力命名为“wilfried”。虽然这当然没问题,但我只是想确保我没有通过说“将此名称更改为任何..”来混淆任何人。它仍然是赋予用户角色的功能名称,而不是 WordPress 用户或角色名称。
- 您的代码中有错误,抱怨
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 的实例,则只需注册一个过滤器方法(而不是为每个实例添加一个过滤器 - 在这种情况下这是无用的)。