web-dev-qa-db-fra.com

Attribuer le rôle à l'utilisateur lors de la première connexion, s'il est premier (après l'administrateur)

Je cours un multisite Wordpress.

Je souhaite que le premier utilisateur qui se connecte à un nouveau site se voit attribuer le rôle Administrateur afin de pouvoir administrer les autres rôles. Le deuxième utilisateur, et tous les utilisateurs par la suite sur ce site particulier, ne devraient être que des contributeurs.

Lorsque je crée un nouveau site, le premier utilisateur à s'y connecter doit également disposer du rôle Administrateur, ainsi que de tous les autres contributeurs. Comment puis-je faire ceci?

J'ai essayé d'utiliser à la fois wpmu_new_user et wpmu_activate_user avec la fonction suivante, qui ne fonctionne pas, et l'utilisateur créé n'a aucun rôle lorsque j'essaie de le définir avec cette fonction:

function test_onboarding_user($user_id){

    $user = get_user_by( 'id', $user_id );
    if (!$user->exists()) {
        return;
    }
    $current_user_list = get_users();
    if(count($current_user_list) == 2){ // The first user is the Super Admin, so this user should be #2
        $user->set_role('administrator');
    } else {
        $user->set_role('contributor');
    }
}

add_action( 'wpmu_new_user', 'test_onboarding_user', 20, 1 );
1
setrole

Pour définir si l'utilisateur connecté appartient au blog, vous devez le faire à la connexion wp_login, ce qui signifie que l'utilisateur est connecté:

const ROLE_ADMINISTRATOR = "administrator";
const ROLE_CONTRIBUTOR = "contributor";


add_action("wp_login", function ($user_login, \WP_User $user) {


    if (    !is_multisite()
        ||  is_user_member_of_blog()
    ) {
        return;
    }


    $usersAdministrator = get_users([
        "role" => ROLE_ADMINISTRATOR,
    ]);


    if (count($usersAdministrator) > 0) {
        $newRole = ROLE_CONTRIBUTOR;
    } else {
        $newRole = ROLE_ADMINISTRATOR;
    }

    add_user_to_blog(
          get_current_blog_id()
        , $user->ID
        , $newRole
    );


}, 10, 2);
2
Jeanne Kidaw