web-dev-qa-db-ja.com

wp_insert_userロールが機能していません

私はこれを一日中試していますが、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 );
5
The Beast
$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') ) ;

あなたが実用的な解決策を探しているので、これはうまくいくはずです、そしてそれはただ役に立つ答え候補です。私はこれが最善の解決策ではないかもしれないし、おそらく近いかもしれませんが、うまくいくはずです。

3
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がOKで、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 で読むことができます。

3
prosti