web-dev-qa-db-fra.com

Comment attribuer un rôle utilisateur supplémentaire/extra/second à plusieurs utilisateurs (d'un rôle utilisateur spécifique)

J'ai 500 utilisateurs avec 50 de ces utilisateurs affectés au rôle d'utilisateur XYZ. J'aimerais que ces 50 utilisateurs XYZ conservent leur rôle utilisateur actuel XYZ mais aussi se voient attribuer un autre rôle/additionnel/extra/deuxième rôle ABC ... sous forme de travail en bloc.

Je cherche une fonction qui pourrait

  1. trouver tous les utilisateurs avec le rôle utilisateur XYZ
  2. puis assignez-les à un deuxième rôle d'utilisateur ABC
2
Pete

Vous devriez pouvoir le faire vous-même en écrivant une fonction simple et en la reliant à une action liée à l'utilisateur (que vous souhaitiez le faire une fois ou de façon continue, cela dépend de vous).

Il existe différentes manières de le déclencher, mais le plus simple que je puisse imaginer serait de se connecter au profile_update hook afin qu'il soit exécuté à chaque fois qu'un utilisateur est enregistré. Vous pouvez également vous connecter à user_register pour qu'il soit exécuté chaque fois qu'un nouvel utilisateur est ajouté afin de garantir la synchronisation de vos données. Afin de tester cela, vous voudrez alors essayer de sauvegarder un utilisateur existant ou de créer un nouvel utilisateur, car cela déclenchera le hook d’action.

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

Cela suppose que vous avez déjà ajouté le rôle abc à l’aide de add_role afin que WP en soit conscient.

Malheureusement, je ne suis pas disponible pour le tester pour le moment, mais je le ferai plus tard, mais cela devrait vous orienter dans la bonne direction.

2
brianjohnhanna