web-dev-qa-db-ja.com

追加の/ extra/secondのユーザーロールを(特定のユーザーロールの)複数のユーザーに割り当てる方法

私は500人のユーザーを持ち、そのうち50人はユーザーロールXYZに割り当てられています。これらの50人のXYZユーザーに、現在のXYZユーザー役割を維持するだけでなく、別の/追加の/ extra/secondのユーザー役割ABCを割り当てるようにします。 ..大量の仕事として。

私は可能な機能を探しています

  1. ユーザーロールXYZを持つすべてのユーザーを見つける
  2. 次にそれらをABCの2番目のユーザー役割に割り当てます。
2
Pete

単純な関数を書いてそれをユーザー関連のアクションにフックすることで自分でできるようになるはずです(これを1回実行するのか継続的に実行するのかはあなた次第です)。

トリガーする方法はいくつかありますが、おそらく最も簡単な方法は、 profile_update フックにフックして実行することです。ユーザーが保存されるたびに。また、 user_register にフックして、新しいユーザーが追加されるたびにデータが同期されるようにすることもできます。これをテストするには、アクションフックをトリガーするので、既存のユーザーを保存するか新しいユーザーを作成してみます。

add_action( 'profile_update', 'wpse_assign_abc_role_to_xyz_users', 10 );
add_action( 'user_register', 'wpse_assign_abc_role_to_xyz_users', 10 );

function wpse_assign_abc_role_to_xyz_users() {
   $args = array(
        'role'         => 'xyz', // Set the role you want to search for here
        'role__not_in' => array( 'abc' ), // If they already have abc role, we can skip them
        'number'       => '500', // Good idea to set a limit to avoid timeouts/performance bottlenecks
    ); 
    $xyz_users = get_users( $args );

    // Bail early if there aren't any to update
    if ( count( $xyz_users ) === 0 ) return;

    // get_users() returns an array of WP_User objects, meaning we can use the add_role() method of the object

    foreach ( $xyz_users as $user ) {
        $user->add_role( 'abc' );
    }
}

これは、WPが認識できるように、 add_role を使用して既にabcロールを追加していることを前提としています。

残念ながら、今すぐテストすることはできませんが、後で試してテストしますが、正しい方向に操作できるはずです。

2
brianjohnhanna