Adding New Role

时间:2015-02-19 作者:user3172085

我在中添加了新角色functions.php 按此代码归档:

// Add a custom user role

$result = add_role( \'supplier_for_planvent\', __(
\'Supplier_For_Planavent\' ),
array(
    \'read\' => true, // true allows this capability
    \'edit_posts\' => true, // Allows user to edit their own posts
    \'edit_pages\' => true, // Allows user to edit pages
    \'edit_others_posts\' => true, // Allows user to edit others posts not just their own
    \'create_posts\' => true, // Allows user to create new posts
    \'manage_categories\' => true, // Allows user to manage post categories
    \'publish_posts\' => true, // Allows the user to publish, otherwise posts stays in draft mode

));
但当我通过新角色帐户登录时,我收到了以下消息:

您没有足够的权限访问此页面。

有人能帮我吗?

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

第一次发生在我身上。一点也不重要。如果您想知道这个东西是如何工作的,以及如何调试它,请继续阅读。但是如果你想知道刚才发生的事情的原因,请转到这个答案的最底部(#具体答案)。

如果您联系Codex page for add_role(), 第二句话是:

NB: This setting is saved to the database (in table wp_options, field wp_user_roles), so it might be better to run this on theme/plugin activation

因此,如果您正在开发一个主题,那么就这样做吧,在您的functions.php:

add_action( \'after_switch_theme\', \'wpse_create_user_roles\' );

function wpse_create_user_roles() {

    $add_supplier = add_role( \'supplier_for_planvent\', __( \'Supplier_For_Planavent\' ),
            array(
                \'read\' => true,
                \'edit_posts\' => true,
                \'edit_pages\' => true,
                \'edit_others_posts\' => true,
                \'create_posts\' => true,
                \'manage_categories\' => true,
                \'publish_posts\' => true
            ));

}
Theafter_switch_theme 钩子只有在主题被激活时才会触发,并且只会触发一次。因此,我们只创建一次新的用户角色,这是正确的方法。

如果您正在开发插件,只需更改以下行:

add_action( \'after_switch_theme\', \'wpse_create_user_roles\' );
进入

register_activation_hook( __FILE__, \'wpse_create_user_roles\' );
因此,同样的事情也会发生,只有当插件被激活时,才会创建一个新的用户角色,并且只有一次。:)

现在发生了什么:根据法典,打开数据库并查看wp_options 桌子搜索wp_user_roles 在里面option_name 列,您将得到一行。

search in options table

Please note that, 如果数据库表前缀为wp_, 那么选项\\u名称如下所示。但在我的例子中,我改为db table prefix,因此在我的例子中,选项\\u name变成$myprefix_user_roles.

所以您刚才创建的内容存储在这里。但是option_value 是一些几乎无法辨认的东西,别担心,我们有钥匙。复制option_valuejsfiddle.net, 将其粘贴到JavaScript块中,然后单击TidyUp按钮,您将看到该字符串的可读外观。这是一个PHP序列化数据。在这段代码的最底层,您将看到您的用户角色及其权限。

如果我们只更改代码中的一行(功能),会发生什么情况:

\'edit_posts\' => false,
it won\'t make any change, 由于此字段无法更新自身,因此它只能在触发时创建/写入自身一次。那么,该功能已经创建了什么\'edit_posts\'=>true, 现在不可能是假的。

如果我们忘记分配\'read\'=>true 特权优先,我无法使用该用户角色访问后端。我们怎样才能在以后扮演这个角色呢?

答:我们必须delete/remove the user role 第一

让我们在主题的任何地方删除它,使用以下代码。但最好在我们的功能中添加我们为创建新角色所做的工作,就像这样:

add_action( \'after_switch_theme\', \'wpse_create_user_roles\' );

function wpse_create_user_roles() {

    $add_supplier = add_role( \'supplier_for_planvent\', __( \'Supplier_For_Planavent\' ),
            array(
                \'read\' => true,
                \'edit_posts\' => true,
                \'edit_pages\' => true,
                \'edit_others_posts\' => true,
                \'create_posts\' => true,
                \'manage_categories\' => true,
                \'publish_posts\' => true
            ));

    remove_role( \'supplier_for_planvent\' ); //it will remove the user role

}
它将删除我们切换主题时刚刚创建的用户角色,因此激活另一个主题并再次重新激活您的主题。现在您的用户角色已重置。

转到代码,然后remove 生产线remove_role(), 再次,激活另一个主题并重新激活您的主题。它将使用分配的新权限创建您的用户角色。法典还说:

This is for development only. Once you have nailed down your list of capabilities, there\'s no need to keep the remove_role() code, 尽管这样做实际上没有害处。

具体答案这就是用户角色添加的工作方式。针对您的问题,答案是:您忘记分配\'read\'=>true 特权在先,发生了什么事,它记得让你远离它删除用户角色并再次创建,它将在Hallah中工作。

结束

相关推荐

加载CSS文件的子主题中的Functions.php中断网站

我创建了一个子主题并创建了一个函数。子主题目录中也具有所需样式的php文件。css文件和我要加载的单独自定义css文件。这是我使用的代码:<? php add_action(\'wp_head\', \'add_landing_css\'); function add_landing_css() { wp_enqueue_style(\'landing_css\', get_stylesheet_directory_uri().\'/landing.cs