首次登录时将角色分配给用户(如果他们是第一次登录)(在管理员之后)

时间:2018-08-06 作者:setrole

我正在运行Wordpress多站点。

我希望第一个用户登录到一个新站点,以分配管理员角色,以便他们可以管理其他角色。第二个用户,以及该特定站点上的所有用户,应该只是贡献者。

当我创建一个新站点时,第一个登录该站点的用户还应该具有管理员角色,以及所有其他后续贡献者。我该怎么做?

我试着两者都用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 个回复
最合适的回答,由SO网友:Jeanne Kidaw 整理而成

要设置连接的用户是否属于博客,您需要在hook上进行设置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);

结束

相关推荐

更改WordPress MultiSite中媒体上载文件夹的路径

有人知道如何删除/sites/#blog_id/ 从多站点媒体路径?我们在main中上传了所有图像/public_html/images/ 当它连接到媒体库时,由于WPMU广告,子域上的所有图像都会被破坏/sites/#blog_id/ 为每个子域单独设置。这就产生了在不同的博客中使用相同股票图像的问题。我正在寻找一个解决方案,使所有上传的图像存储在一个地方,并可以从任何子博客平等访问。

首次登录时将角色分配给用户(如果他们是第一次登录)(在管理员之后) - 小码农CODE - 行之有效找到问题解决它

首次登录时将角色分配给用户(如果他们是第一次登录)(在管理员之后)

时间:2018-08-06 作者:setrole

我正在运行Wordpress多站点。

我希望第一个用户登录到一个新站点,以分配管理员角色,以便他们可以管理其他角色。第二个用户,以及该特定站点上的所有用户,应该只是贡献者。

当我创建一个新站点时,第一个登录该站点的用户还应该具有管理员角色,以及所有其他后续贡献者。我该怎么做?

我试着两者都用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 个回复
最合适的回答,由SO网友:Jeanne Kidaw 整理而成

要设置连接的用户是否属于博客,您需要在hook上进行设置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);