web-dev-qa-db-ja.com

最初のログイン時にユーザーにロールを割り当てます(初めての場合)(adminの後)

私はWordpress Multisiteを運営しています。

最初のユーザーに新しいサイトにログインして管理者ロールを割り当て、他のロールを管理できるようにします。 2人目のユーザー、およびそれ以降その特定のサイトにいるすべてのユーザーは、投稿者だけになります。

私が新しいサイトを作成するとき、そこに最初にログインしたユーザーも管理者の役割を持ち、それ以外のすべての人は投稿者の役割を持つべきです。これどうやってするの?

次の関数でwpmu_new_userwpmu_activate_userの両方を使用しようとしましたが、これは機能しません。作成したユーザーは、この関数を使用して設定しようとしても役割を持ちません。

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

接続ユーザーがブログに属していることを設定するには、フックwp_loginでそれを行う必要があります。これは、ユーザーが接続されていることを意味します。

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