技术求助:让WordPress插件NS Cloner对所有用户可见而非仅网络管理员
让NS Cloner在WordPress多站点所有用户后台显示的解决方案
NS Cloner默认只对网络管理员开放访问权限,要让站点管理员、编辑等其他用户也能在后台看到并使用它,咱们可以通过两种方法实现,下面详细说明:
方法一:直接调整插件权限配置(注意:插件更新会覆盖修改)
- 找到NS Cloner插件的核心文件,一般路径是
ns-cloner-site-copier/ns-cloner.php - 定位到注册网络菜单的代码段,通常长这样:
add_action('network_admin_menu', 'ns_cloner_add_network_menu'); function ns_cloner_add_network_menu() { add_submenu_page('sites.php', 'NS Cloner', 'Clone Site', 'manage_network', 'ns-cloner', 'ns_cloner_render_clone_page'); } - 这里的
manage_network是网络管理员专属权限,你可以把它改成站点级权限,比如manage_options(对应站点管理员),或者edit_posts(对应编辑角色),根据你的需求来。修改后代码如下:add_action('network_admin_menu', 'ns_cloner_add_network_menu'); function ns_cloner_add_network_menu() { add_submenu_page('sites.php', 'NS Cloner', 'Clone Site', 'manage_options', 'ns-cloner', 'ns_cloner_render_clone_page'); } - 别忘了同步调整克隆操作的权限检查:找到插件里判断用户权限的
current_user_can('manage_network')代码,同样替换成你选的权限(比如current_user_can('manage_options'))。
方法二:用自定义钩子实现(推荐,避免插件更新丢失修改)
如果不想改动插件本身的代码,咱们可以借助WordPress的钩子来扩展权限:
在你的子主题functions.php文件里,或者新建一个自定义插件,添加以下代码:
// 给站点管理员开放NS Cloner的访问权限 add_filter('user_has_cap', 'ns_cloner_extend_access_permission', 10, 3); function ns_cloner_extend_access_permission($allcaps, $cap, $args) { // 当用户请求NS Cloner的访问权限时,允许站点管理员通过 if ($cap[0] === 'manage_network' && $args[0] === 'ns-cloner') { if (current_user_can('manage_options')) { $allcaps['manage_network'] = true; } } return $allcaps; } // 在站点管理员后台添加NS Cloner菜单入口 add_action('admin_menu', 'ns_cloner_add_site_admin_menu_entry'); function ns_cloner_add_site_admin_menu_entry() { if (is_multisite() && current_user_can('manage_options')) { add_submenu_page('sites.php', 'NS Cloner', 'Clone Site', 'manage_options', 'ns-cloner', 'ns_cloner_render_clone_page'); } }
这段代码的作用:
- 通过
user_has_cap钩子,给拥有manage_options权限的用户临时赋予访问NS Cloner的权限 - 通过
admin_menu钩子,在站点管理员的后台菜单里添加NS Cloner的入口
额外提醒
- 优先选择钩子方法,插件更新后不用重复修改
- 权限选择要谨慎:如果只想让站点管理员使用就用
manage_options,如果要开放给编辑就用edit_posts - 修改前记得备份网站,避免出现权限混乱问题
内容的提问来源于stack exchange,提问作者Fabio Maximo Chagas
相关产品推荐
相关产品推荐

