WP_INSERT_USER角色不起作用

时间:2016-04-18 作者:The Beast

我已经尝试了一整天了,但它不起作用。如何为插入的当前用户设置角色wp_insert_user() 作用

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

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

$WP_array = 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,
    ) ;

    $id = wp_insert_user( $WP_array ) ;

    wp_update_user( array (\'ID\' => $id, \'role\' => \'editor\') ) ;
既然您正在寻找有效的解决方案,那么这个解决方案应该有效,而且它只是一个有用的候选答案。我意识到这可能不是最好的解决方案,甚至可能不是很接近,但它应该会起作用。

SO网友:prosti

在深入挖掘并检查我的情况后,我发现这个脚本会很好地工作。

$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.

SO网友:user2215032

仅限用户小写(&W);在两个单词中,角色使用下划线而不是空格

\'role\' => \'Editor\'           ------->    \'role\' => \'editor\'

\'role\' => \'Shop manager\'     ------->    \'role\' => \'shop_manager\'