如何为WordPress新用户仅开放Newsletter插件的后台访问权限?
一、插件方案
1. User Role Editor
这款插件能直观自定义用户角色权限,操作步骤:
- 安装激活后进入「用户 → 用户角色编辑器」
- 点击「添加角色」,创建新角色(比如命名为「Newsletter管理员」)
- 在权限列表里只勾选Newsletter相关权限(通常以
manage_newsletter、edit_newsletter等开头,可通过插件权限标识确认) - 切换到「菜单访问」标签,隐藏所有非Newsletter的后台菜单
- 创建新用户并分配该角色即可
2. Members
主流权限管理插件,操作逻辑类似:
- 激活后进入「角色 → 添加新角色」
- 为新角色分配Newsletter所需的核心权限
- 利用插件的「菜单权限」功能,禁用其他后台菜单入口
- 给目标用户分配该角色
二、代码方案(无需额外插件)
如果不想依赖插件,可将以下代码添加到主题functions.php或自定义插件中:
1. 创建自定义角色并分配Newsletter权限
add_action('init', 'create_newsletter_only_role'); function create_newsletter_only_role() { // 创建仅具备Newsletter权限的角色 add_role( 'newsletter_manager', 'Newsletter 管理员', array( 'read' => true, // 必须保留,否则无法登录后台 'manage_newsletters' => true, // Newsletter核心管理权限 'edit_newsletters' => true, 'publish_newsletters' => true, 'delete_newsletters' => true, ) ); }
2. 隐藏后台无关菜单
add_action('admin_menu', 'remove_unwanted_menus_for_newsletter_role'); function remove_unwanted_menus_for_newsletter_role() { $current_user = wp_get_current_user(); if (in_array('newsletter_manager', $current_user->roles)) { // 移除所有非必要后台菜单 remove_menu_page('index.php'); // 仪表盘 remove_menu_page('edit.php'); // 文章 remove_menu_page('upload.php'); // 媒体库 remove_menu_page('edit.php?post_type=page'); // 页面 remove_menu_page('edit-comments.php'); // 评论 remove_menu_page('themes.php'); // 外观 remove_menu_page('plugins.php'); // 插件 remove_menu_page('users.php'); // 用户 remove_menu_page('tools.php'); // 工具 remove_menu_page('options-general.php'); // 设置 // 保留Newsletter菜单,若slug不同可通过页面源码查看实际值 } }
3. 限制直接访问未授权页面
防止用户通过URL跳转至非允许页面:
add_action('admin_init', 'restrict_admin_pages_for_newsletter_role'); function restrict_admin_pages_for_newsletter_role() { $current_user = wp_get_current_user(); if (in_array('newsletter_manager', $current_user->roles)) { // 允许访问的Newsletter页面slug,需根据插件实际路径调整 $allowed_pages = array('newsletter', 'newsletter_subscribers', 'newsletter_campaigns'); $current_page = isset($_GET['page']) ? $_GET['page'] : ''; if (!in_array($current_page, $allowed_pages) && $GLOBALS['pagenow'] !== 'admin.php') { wp_redirect(admin_url('admin.php?page=newsletter')); exit; } } }
注意事项
- 确认Newsletter具体权限名:可查看插件代码,或临时用User Role Editor查看所有可用权限
- 代码建议放在自定义插件中,避免主题更新丢失
- 测试时用新角色用户登录,验证权限是否符合预期
内容的提问来源于stack exchange,提问作者Chetan
相关产品推荐
相关产品推荐

