在深入挖掘并检查我的情况后,我发现这个脚本会很好地工作。
$userdata = array(
\'user_login\' => $username,
\'user_email\' => $email,
\'user_pass\' => $password,
\'user_url\' => $website,
\'first_name\' => $first_name,
\'last_name\' => $last_name,
\'nickname\' => $nickname,
\'description\' => $bio,
\'role\' => \'editor\'
);
$user = wp_insert_user( $userdata );
然而,这个剧本中没有任何神秘之处。看起来这些角色需要使用小写,你需要责怪这个函数,这是我经过几天的分析后发现的。
/wp-includes/class-wp-roles.php
284: /**
285: * Whether role name is currently in the list of available roles.
286: *
287: * @since 2.0.0
288: * @access public
289: *
290: * @param string $role Role name to look up.
291: * @return bool
292: */
293: public function is_role( $role ) {
如果您在中编写这样的代码,您可以检查自己
functions.php
.
$r = new WP_Roles();
var_dump("editor", $r->is_role("editor"));
var_dump("Editor", $r->is_role("Editor"));
die();
你会得到这样的最终结果。
string(6) "editor" bool(true) string(6) "Editor" bool(false)
这意味着
editor
因为角色名称是确定的
Editor
不正常。
我们必须注意,如果您设置这样的空角色\'role\' => ""
这将导致根本不设置任何角色(就像@TheBeast最初体验到的Editor
名称,结尾未设置角色)。
另一方面如果你忽略\'role\'
键,则您的用户将担任默认角色。默认角色通常是editor
, 但这取决于您的自定义,因为您可以通过get_option(\'default_role\')
, 端集通过set_option
作用
过去,我发现有迹象表明@TheBeast的代码实际上可以工作。(https://wordpress.org/support/topic/wp_insert_user-function-user-roles?replies=3)
对我们来说,真正重要的是增加角色的过程。你可以这样写:
add_action( \'init\', \'plugin_add_role\');
function plugin_add_role( \'reviewer\', \'Reviewer\', $caps );
在这里你的
$caps
功能类似于:
$caps = array(
\'read\' => true,
\'edit_posts\' => true,
\'edit_others_posts\' => true,
\'edit_private_posts\' => true,
\'edit_published_posts\' => true,
\'read_private_posts\' => true,
\'edit_pages\' => true,
\'edit_others_pages\' => true,
\'edit_private_pages\' => true,
\'edit_published_pages\' => true,
\'read_private_pages\' => true,
);
您可以在codex中阅读有关功能的更多信息
https://codex.wordpress.org/Roles_and_Capabilities.