How do you add a custom option to user data?

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()

Leave a Comment