基于自定义角色的用户无法访问wp-admin

时间:2017-11-16 作者:Subrata Sarkar

首先,我是一名WordPress学习者。如果我的代码看起来很蠢,我很抱歉!

我创建了一个具有自定义用户角色的自定义主题。我没有开发任何插件。

在我的职责范围内。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);
}
我已删除除管理员以外的所有角色,因为此门户不需要其他角色。管理员将仅创建具有Customer Service 角色

我没有在系统中安装第三方插件。

具有自定义角色的用户可以通过工作正常的自定义登录页面登录到系统。但每当他们试图访问其个人资料页面时,就会出现以下错误消息:

抱歉,不允许您访问此页面。

有类似的吗\'edit_profile\' => true?

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

1 个回复
最合适的回答,由SO网友:websupporter 整理而成

这个read 能力必须设置为true, 这样他们就可以访问。

请记住,在每个init 操作,这被认为是非常耗时的。

法典建议在register_activation_hook(). 由于您在主题中使用此代码,您可能需要检查角色是否存在。

由于您是在主题中运行此功能,因此这可能是一种解决方法:

function yrc_cst_register_role_customer_service_rep() {

    $wp_roles = new WP_Roles();

    //$wp_roles->remove_role(\'customer_service\'); // Remove it only for test purposes.

    if ( $wp_roles->is_role( \'customer_service\' ) ) {
        return;
    }

    $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\'  => true,
    );
    add_role(\'customer_service\', __(\'Customer Service\'), $service_rep_caps);

}

结束

相关推荐

在前端使用wp-admin翻译

目前,我正致力于在前端实现用户配置文件表单。不幸的是,前端核心翻译文件(wp-content/languages/lang_LANG.po) 在用户配置文件页面上未显示任何已翻译的字符串。这些翻译后的字符串位于wp-content/languages/admin-lang_LANG.po 由于文件名以“admin”开头,我的猜测是,只有在访问wp admin页面时(当is_admin() 返回true)。因此,当您没有查看wp admin页面时,如何加载wp admin的文本域?