ユーザーの役割を変更する方法は?


34

セットアップにカスタムロールがあり、関数を介してユーザーのロールを自動的に変更できるようにしたい。ユーザーAがSUBSCRIBERの役割を持っているとします。EDITORに変更するにはどうすればよいですか?ロールを追加するとき、私たちはただ:

add_role( $role_name , $role_display_name , array( 'read' =>  true,
                                                   'edit_posts' => false,
                                                   'delete_posts' => false, ));

役割を変えてみませんか?次のようなものがありますか?

change_role($old_role, $new_role);

更新: 私はこれがやると思う:

$wp_user_object = new WP_User($current_user->ID);
$wp_user_object->set_role('editor');

回答:


50

WP_Userクラスを参照してください。これを使用して、ユーザーのロールを追加および削除できます。

編集: 私は本当に最初にこの回答でより多くの情報を提供すべきだったので、私は以下の情報を追加しています。

より具体的には、WP_userクラスのインスタンスを作成し、add_role()or remove_role()メソッドを呼び出すことにより、ユーザーのロールを設定できます。

購読者の役割を編集者に変更する

// NOTE: Of course change 3 to the appropriate user ID
$u = new WP_User( 3 );

// Remove role
$u->remove_role( 'subscriber' );

// Add role
$u->add_role( 'editor' );

願わくば、それが私の最初の反応よりも役立つことを願っています。


remove_role()そしてadd_rule()、データベースにデータを保存しますか?
b_dubb

18

ユーザーロールを変更するより簡単な方法があることに注意してください。これは、ユーザーの現在のロールがわからない場合に特に役立ちます。 ->set_role()

例:

// Fetch the WP_User object of our user.
$u = new WP_User( 3 );

// Replace the current role with 'editor' role
$u->set_role( 'editor' );

set_roleはユーザーの以前のロールを削除し、新しいロールを割り当てることに注意してください。
シャシカント16年

1
これは、カスタム登録フォームに最適です。最初にロールのないユーザーを登録し、その後、メールを確認したらロールを追加します。
イビジャンステファンスティピッチ

3

t31osの答えを推定するには、条件に基づいてプログラムでこれを行う場合は、関数ファイルでこのようなものを平手打ちできます

$blogusers = get_users($blogID.'&role=student');

foreach ($blogusers as $user) {

    $thisYear = date('Y-7');
    $gradYear = date(get_the_author_meta( 'graduation_year', $user->ID ).'-7');

    if($gradYear < $thisYear) {
        $u = new WP_User( $user->ID );
        // Remove role
        $u->remove_role( 'student' );

        // Add role
        $u->add_role( 'adult' );
    }
}

の使い方$blogIDが間違っていると思います。get_users()とにかくデフォルトごとに現在のブログIDを使用します。
fuxia

うん、私の場合、ペーストはマルチサイトの例からのものでした。ここでも定義しなかったので、明らかにエラーがスローされます。
アダムマンズ

2

ユーザープロファイルを編集することにより、任意のユーザーの役割を変更できます。このオプションが既にWordPressに組み込まれている場合、コードを追加する必要はありません。

ここに画像の説明を入力してください

または

コードを使用して、サブスクライバーロールを持つ現在のすべてのユーザーを編集者に変更できます。

$current_user = wp_get_current_user();

// Remove role
$current_user->remove_role( 'subscriber' );

// Add role
$current_user->add_role( 'editor' );

1

そのためのWordPress機能があります!

可能であれば、WordPressの機能を使用するのが最善だと思います。

wp_insert_user()関数を使用できます。提供する必要がある引数の1つは$ userdata ['role']です。この引数では、ユーザーを変更するロールを指定できます。


wpはその機能を認識しません。「未定義関数」エラーが発生しました。
ジョアン

見たところ、wp_insert_user()はまったく同じことをしているようです。IDを指定すると、そのIDが更新されます。IDは新しいユーザーを追加していません。まだ、wp_update_user()とwp_insert_user()の違いが実際にはわからない。
コーエンジェイコブス

1

コードをスタンドアロンスクリプトとして使用する場合は、/ wp-includes / registration.phpを含める必要があります。よろしくUwe


1

wp_update_userを使用できます。コードは次のようになります。

<?php
    $user_id = 3;
    $new_role = 'editor';

    $result = wp_update_user(array('ID'=>$user_id, 'role'=>$new_role));

    if ( is_wp_error( $result ) ) {
        // There was an error, probably that user doesn't exist.
    } else {
        // Success!
    }
?>

0
<?php
$wuser_ID = get_current_user_id();
if ($wuser_ID)
    {
      // NOTE: Of course change 3 to the appropriate user ID
      $u = new WP_User( $wuser_ID );

      // Remove role
      $u->remove_role( 'subscriber' );

      // Add role
      $u->add_role( 'contributor' );
    }
?>

0

私はそのA非常に古いポストを知っている、しかし、私は、ユーザーのための役割をに格納されていることを発見したwp_usermetaキーを持つテーブルwp_capabilitiesmeta_key列。

ユーザーロールを変更する場合は、この単純な機能を使用して変更できます。

function change_role($id, $new_role){
    GLOBAL $table_prefix;
    if(is_array($new_role)){
        $new_role_array = $new_role;
    }else{
        $new_role_array = array( $new_role => true );
    }
    return update_user_meta($id, $table_prefix.'capabilities', $new_role_array);
}

この関数を使用するには2つの方法があります。

単一の役割の役割を変更する場合。

change_role(2, 'editor'); // editor is the new role

または、ユーザーに複数の役割を追加する場合は、2番目のパラメーターで配列として役割を使用します。

$roles_array = array('editor' => true, 'administrator' => true); // roles array
change_role(2, $roles_array);

がんばろう。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.