首先,我是一名WordPress学习者。很抱歉,如果我的代码看起来很愚蠢!
我创建了一个具有自定义用户角色的自定义主题。我没有开发任何插件。
在我的fucntions.php文件中,我编写了以下代码来创建用户角色。分配给此角色的用户应该登录管理员,但只能访问他们的个人资料页面。
add_action('init', 'yrc_cst_register_role_customer_service_rep');
/**
* Register new user role
*/
function yrc_cst_register_role_customer_service_rep() {
$wp_roles = new WP_Roles();
$wp_roles->remove_role('subscriber');
$wp_roles->remove_role('editor');
$wp_roles->remove_role('contributor');
$wp_roles->remove_role('author');
$service_rep_caps = array(
'read' => false,
'create_posts' => false,
'edit_posts' => false,
'edit_others_posts' => false,
'publish_posts' => false,
'manage_categories' => false,
'manage_options' => false,
);
add_role('customer_service', __('Customer Service'), $service_rep_caps);
}
我已删除除管理员以外的所有角色,因为此门户网站不需要其他角色。管理员只会创建具有客户服务角色的用户。
我没有在系统中安装第三方插件。
具有自定义角色的用户可以通过自定义登录页面登录系统。但无论何时他们尝试访问其“个人资料”页面,都会出现以下错误消息:
抱歉,您无法访问此页面。
有'edit_profile' => true
吗?
我必须做错事,但我的有限知识还不足以解决这个问题。任何建议都将受到高度赞赏。
答案 0 :(得分:4)
您可以这样做:
这应该克隆订阅者角色功能并为其创建角色。
add_action('init', 'CreatecloneRoleSubscriber');
function CreatecloneRoleSubscriber()
{
global $wp_roles;
if ( ! isset( $wp_roles ) )
$wp_roles = new WP_Roles();
$sub = $wp_roles->get_role('Subscriber');
//Adding a 'new_role' with all subscriber caps
$wp_roles->add_role('customer_service', 'Customer Service', $sub->capabilities);
}
编辑:阅读问题评论中的讨论
答案 1 :(得分:1)
在您的情况下,只需将manage_options更改为true即可 但请注意,通过允许manage_options为true,这些用户也可以访问仪表板的其他部分
$service_rep_caps = array(
'read' => false,
'create_posts' => false,
'edit_posts' => false,
'edit_others_posts' => false,
'publish_posts' => false,
'manage_categories' => false,
'manage_options' => true, // Most plugins and pages check for manage_options for checking access level to allow access to pages and settings.
);
答案 2 :(得分:0)
刚刚找到这个我认为非常干净的解决方案,可以使用新角色输入 wp-admin:
为您的新角色添加上限 view_admin_dashboard
和 read
。
将此功能添加到您的 wordpress。
# functions.php
add_filter( 'show_admin_bar', function () {
if ( current_user_can( 'view_admin_dashboard' ) )
return true;
return false;
}, 10);