web-dev-qa-db-ja.com

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

私は私の設定でカスタムロールを持っていて、私は機能を通してユーザのロールを自動的に変更できるようにしたいです。ユーザー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');
33
Joann

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

編集: 私は本当にこの答えで最初にもっと多くの情報を提供しているはずなので、私は以下にもっと情報を追加します。

より具体的には、WP_userクラスのインスタンスを作成し、add_role()または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' );

うまくいけば、それは私の最初の返答よりももっと役に立ちます。

48
t31os

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

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' );
    }
}
3
Adam Munns

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

enter image description here

または

コードを使用して、購読者ロールを持つ現在のすべてのユーザーを編集者に変更できます。

$current_user = wp_get_current_user();

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

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

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!
    }
?>
1

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

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

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

1
Coen Jacobs

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

1
Uwe
<?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
Wasim Khan

私はその非常に古いPostを知っています、しかし私はユーザーのための役割がwp_usermeta列のキーwp_capabilitiesと共にmeta_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);

がんばろう。

0