1. You need to add the html element for the new filed

To add a new field you need to edit the templates/user_profile.php file. Add the new html element but also make sure you retrieve the information in the page header (will be used to fill up the form if is anything saved ).

For example you can clone one of the existing fields

$user_mobile  =   get_the_author_meta( 'mobile' , $userID ); //in top of the page

2.Save it into database

The save of user profile is made via ajax . SO there is js code located in ajaxcalls.js at line 2238

$('#update_profile').click(function () {
var live_in,i_speak, usermobile, userpinterest, userlinkedin, usertwitter, userfacebook, profile_image_url, profile_image_url_small, firstname, secondname, useremail, userphone, userskype, usertitle, description, ajaxurl, securityprofile, upload_picture;
firstname = $('#firstname').val();
secondname = $('#secondname').val();
useremail = $('#useremail').val();.......

and a php function called wpestate_ajax_update_profile in ajax_functions.php at line 1226

function wpestate_ajax_update_profile(){
$current_user = wp_get_current_user();
$userID = $current_user->ID;
if ( !is_user_logged_in() ) {
.........

 

Make sure that in js file   you retrive the value of the filed and send it via ajax call -(again look how another field value is read and sent) . In the php file you get the value sent via ajax call

$firstname = sanitize_text_field ( wp_kses( $_POST['firstname'] ,$allowed_html) );

and save the field as a user meta

update_user_meta( $userID, 'first_name', $firstname ) ;

To reitive the new field in other pages you need to use a code like this

$user_new_field = get_the_author_meta( 'new_field' , $userID );