WordPress:具有自定义角色的用户无法访问 wp-admin

Posted

技术标签:

【中文标题】WordPress:具有自定义角色的用户无法访问 wp-admin【英文标题】:WordPress: User with custom role cannot access wp-admin 【发布时间】:2018-04-29 14:47:03 【问题描述】:

首先,我是一名 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之类的吗?

我一定是做错了什么,但我有限的知识不足以解决这个问题。任何建议将不胜感激。

【问题讨论】:

我认为他需要“阅读”=> 是的 但话又说回来 - 默认情况下,订阅者只能访问他们的个人资料页面,对吧? 是的 - 角色应该只有“读” 这种情况下需要加'capabilities' => 'subscriber'吗?更改为 'read' => true 没有任何区别。同样对于自定义角色,定义能力的正确方法是什么,以便他只能访问他的个人资料页面? 看看这个:codex.wordpress.org/Roles_and_Capabilities#Subscriber 【参考方案1】:

你也许可以这样做:

这应该克隆订阅者角色功能并为其创建角色。

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);

编辑:阅读问题 cmets 的讨论

【讨论】:

克隆 - 好东西! 这对我有用!但我需要先添加remove_role() 并将角色重新应用到用户。否则无法更新功能。 @Skatox 那么,您删除了订阅者角色吗? @Stender 否,我删除了 customer_service(我自己的角色)以更新更改。【参考方案2】:

只需根据您的情况将 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.
);

【讨论】:

对,但根据要求,对于具有此角色的用户是不允许的【参考方案3】:

刚刚找到了这个我认为非常干净的解决方案,可以以新角色进入 wp-admin:

为后端添加访问上限

将上限 view_admin_dashboardread 添加到您的新角色中。

显示管理栏

将此功能添加到您的 wordpress 中。

# functions.php

add_filter( 'show_admin_bar', function () 

    if ( current_user_can( 'view_admin_dashboard' ) )
        return true;
    
    return false;

, 10);

【讨论】:

以上是关于WordPress:具有自定义角色的用户无法访问 wp-admin的主要内容,如果未能解决你的问题,请参考以下文章

角色分配策略中无法识别 aws 自定义属性

将用户转发到 Wordpress 中的自定义仪表板

Wordpress 用户角色只允许访问联系表 7

如何从 PHP 代码自定义 Wordpress DashBoard 中的用户角色?

PHP Wordpress添加自定义用户角色

Wordpress:更新用户角色时,功能不会改变