Add custom user profile field to default WordPress MultiSite registration form

I finely made it work this way:

// Sending custom field data to $meta
add_filter('add_signup_meta', 'sb_add_signup_meta');
function sb_add_signup_meta($meta) {
    if( isset( $_POST['phone_number'] ) ) {
        $phone_number = filter_var( $_POST['phone_number'], FILTER_SANITIZE_NUMBER_INT );
        $meta['phone_number'] = $phone_number;
        return $meta;
    }
    else return $meta;
}

// Updating user meta on user activation. Works only if user chose registration without a blog
add_action('wpmu_activate_user','activate_user',10,3);
function activate_user( $user_id, $password, $meta )   {

    if ( isset( $meta['phone_number'] ) ) {
        update_user_meta( $user_id, "phone_number", $meta['phone_number'] );    
    }
}

// Updating user meta on user activation when user has regisration + gets a blog.
add_action( 'wpmu_activate_blog', 'mu_add_roles_after_activation', 10, 3 );
function mu_add_roles_after_activation( $blog_id, $user_id, $password, $signup_title, $meta ) {

    $user_info = get_userdata( $user_id );

    $user_login = $user_info->user_login;

    global $wpdb;

    $signup = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->signups WHERE user_login = %s", $user_login ) );

    $meta = maybe_unserialize( $signup->meta );

    if ( isset( $meta['phone_number'] ) ) {
        update_user_meta( $user_id, "phone_number", $meta['phone_number'] );    
    }   
}

Probably WP developers should made hook wpmu_activate_user work when user+blog are activated, because user is beeng still activated here and is confusing, that wpmu_activate_user hook doesn’t work on user-with-blog activation. And also, it is not the best practice, to connect to DB every time.
So, if you have better ideas, will appreciate it.