当新用户注册时,然后添加新用户角色

时间:2017-04-25 作者:kyrie

我尝试在新用户注册后添加新用户角色时执行自定义功能,新用户角色是用户名。

例如,当用户注册且用户名为apple时,它将自动创建一个名为apple的角色并分配给apple用户。

add_action( \'user_register\', \'add_new_role\' );

function add_new_role() {
 $result = add_role(
    \'user_name\',
    __( \'user_name\' ),
    array(
        \'read\'         => true,  // true allows this capability
        \'edit_posts\'   => true,
        \'delete_posts\' => false, // Use false to explicitly deny
    )
);

}
这段代码可以在注册新用户并创建名为username的角色时实现,我不知道如何从表单中获取用户名,我希望它自动将新角色分配给新用户。

谢谢你的帮助。

2 个回复
最合适的回答,由SO网友:iyrin 整理而成

这个user_register 钩子传递参数$user_id 您的功能。使用实例化用户对象后获取登录名get_userdata( $user_id ).

使用更新分配的用户角色wp_update_user. 或者,您可以使用add_role 在当前分配的角色之外分配新角色,而不是使用删除当前定义的角色wp_update_user.

add_action( \'user_register\', \'abc_assign_role\' );

function abc_assign_role( $user_id ) {
    // Instantiate user object.
    $userobj = get_userdata( $user_id );
    // Define new role using the login name of this user object.
    $new_role = $userobj->user_login;

    // Create the role.
    add_role(
        $new_role,
            __( $new_role ),
            array(
            \'read\'         => true,
            \'edit_posts\'   => true,
            \'delete_posts\' => false,
            )
    );

    // Assign a new role to this user, replacing the currently assigned role.
    wp_update_user( array( \'ID\' => $user_id, \'role\' => $new_role ) );
    // Assign additional role to the user, leaving the default role that is currently assigned to the user.
    // $userobj->add_role( $new_role );
}

SO网友:hwl

函数get\\u userdata()将返回一个WP\\u用户对象,以便您可以访问用户登录(又名用户名)。此外,一旦变量中有了WP\\u用户对象,就可以

$变量->添加\\u角色()

总的来说,是这样的:

add_action(\'user_register\', \'add_role_to_new_user\', 10, 1);
function add_role_to_new_user( $user_id ) {

    $newUser = get_userdata( $user_id ); //WP_User object so we can get the login name

    $newRoleName = $newUser->user_login; // login name in variable

    $newUser->add_role(
        $newRoleName,
        __( $newRoleName ),
        array(
            \'read\'         => true,  // true allows this capability
            \'edit_posts\'   => true,
            \'delete_posts\' => false, // Use false to explicitly deny
            ); //
        }

}

Just to clarify some usage as your needs/intent may dictate approach:

对于@iyrin的wp\\u get\\u current\\u user点,返回当前登录用户的id。如果注册过程发生了变化(需要双重选择等),那么wp\\u get\\u current\\u user是否有值?不知道。

get\\u userdata这里从新注册的用户那里获取id,无论他们是否登录。

其次,使用wp\\u update\\u用户将replace 角色的价值add\\u role将仅添加角色,而不会删除以前的任何角色。

因此,如果您的注册提供了一个subscriber角色,那么除此之外,add\\u role还会添加一个带有用户登录名的角色wp\\u update\\u user将用用户的登录名角色替换订阅服务器角色。

我希望这有帮助。