Are the built in profile fields not as extensive as you’d like? That can be fixed! The following code will add a field (“greeting”) to the “Personal Options” section as well as another (“phone number”) to the “Contact Info” section. Of course, neither of those would be useful if the data wasn’t saved, so that’s in the code too.
add_action( 'personal_options_update', 'save_custom_profile_fields' ); add_action( 'edit_user_profile_update', 'save_custom_profile_fields' ); function save_custom_profile_fields( $user_id ) { update_user_meta( $user_id, 'phone_number', $_POST['phone_number'], get_user_meta( $user_id, 'phone_number', true ) ); update_user_meta( $user_id, 'greeting', $_POST['greeting'], get_user_meta( $user_id, 'greeting', true ) ); } add_filter( 'user_contactmethods', 'add_contact_option', 10, 2 ); function add_contact_option( $user_contactmethods, $user ) { $user_contactmethods['phone_number'] = 'Phone Number'; return $user_contactmethods; } add_action( 'personal_options', 'add_profile_options'); function add_profile_options( $profileuser ) { $greeting = get_user_meta($profileuser->ID, 'greeting', true); ?><tr> <th scope="row">Greeting</th> <td><input type="text" name="greeting" value="<?php echo $greeting; ?>" /></td> </tr><?php }