How set role at registration based on email?

Here is a snippet that assign author role to a new registered member whose email is [email protected] where you need to modify to fit your needs:

add_action( 'user_register', 'user_register_cb', 10, 1 );
function user_register_cb( $user_id ){
    $user_info = get_userdata( $user_id );
    $email = $user_info->user_email;
    $domain = '.co.uk';
    $pos = strpos( $email, $domain );
    if( $pos === 0 ){
        // You can assign any other role
    }else{
        $user_info->set_role( 'author' );
    }
}

You can add those codes in your functions.php in the theme, if you think your theme won’t be changed. Otherwise mu-plugins is the best solution. To use mu-plugins, go to /wp-content/ and find the folder with name ‘mu-plugins’. If there is no folder in that name, then create a folder, name it ‘mu-plugins’, create a file inside that, give any name you like and paste the code in there. You don’t need to activate that plugin. Mu-plugins means must use plugins, so it will be activated automatically always. If you use mu-plugins then add a php start tag at the beginning of the code.