第一次发生在我身上。一点也不重要。如果您想知道这个东西是如何工作的,以及如何调试它,请继续阅读。但是如果你想知道刚才发生的事情的原因,请转到这个答案的最底部(#具体答案)。
如果您联系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
));
}
The
after_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
列,您将得到一行。
Please note that, 如果数据库表前缀为wp_
, 那么选项\\u名称如下所示。但在我的例子中,我改为db table prefix,因此在我的例子中,选项\\u name变成$myprefix_user_roles
.
所以您刚才创建的内容存储在这里。但是option_value
是一些几乎无法辨认的东西,别担心,我们有钥匙。复制option_value
到jsfiddle.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中工作。