To add a field to the profile/user edit page you need to use the edit_user_profile
hook and show_user_profile
hook so:
add_action( 'show_user_profile', 'my_extra_user_fields' );
add_action( 'edit_user_profile', 'my_extra_user_fields' );
function my_extra_user_fields( $user )
{ ?>
<h3>User avatar</h3>
<table class="form-table">
<tr>
<th><label for="user_avatar">User avatar</label></th>
<td>
<input id="user_avatar" name="user_avatar" type="text" value="
<?php $user_avatar = get_the_author_meta( 'user_avatar', $user->ID );
echo $user_avatar ? $user_avatar : '';?>" />
<span class="description"><?php _e("Please enter Avatar URL."); ?></span>
</td>
</tr>
</table>
<?php }
then to save that field you need to use personal_options_update
hook and edit_user_profile_update
hook so:
add_action( 'personal_options_update', 'save_my_extra_user_fields' );
add_action( 'edit_user_profile_update', 'save_my_extra_user_fields' );
function save_my_extra_user_fields( $user_id )
{
if ( !current_user_can( 'edit_user', $user_id ) ) { return false; }else{
if(isset($_POST['user_avatar']) && $_POST['user_avatar'] != ""){
update_usermeta( $user_id, 'user_avatar', $_POST['user_avatar'] );
}
}
}
and as you already know you can featch that data using the_author_meta()
or get_user_meta()