I'm not very good with computers/codes etc. I use a plugin that makes a registration form thingy and in that form I added country, age group, gender and so on. I click the option that will add the registerer into the wordpress user thingy. But when I try it, only the username and email show on the Users section on the backend.. Is there a way for the other fields to show on the users section?

I need them to show for statistical uses.


You need to use the show_user_profile, edit_user_profile, personal_options_update, and edit_user_profile_update hooks.

You can use the following code for adding additional fields in User section

Code for adding extra fields in Edit User Section:

add_action( 'show_user_profile', 'extra_user_profile_fields' );
add_action( 'edit_user_profile', 'extra_user_profile_fields' );

function extra_user_profile_fields( $user ) { ?>
    <h3><?php _e("Extra profile information", "blank"); ?></h3>

    <table class="form-table">
        <th><label for="address"><?php _e("Address"); ?></label></th>
            <input type="text" name="address" id="address" value="<?php echo esc_attr( get_the_author_meta( 'address', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your address."); ?></span>
        <th><label for="city"><?php _e("City"); ?></label></th>
            <input type="text" name="city" id="city" value="<?php echo esc_attr( get_the_author_meta( 'city', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your city."); ?></span>
    <th><label for="postalcode"><?php _e("Postal Code"); ?></label></th>
            <input type="text" name="postalcode" id="postalcode" value="<?php echo esc_attr( get_the_author_meta( 'postalcode', $user->ID ) ); ?>" class="regular-text" /><br />
            <span class="description"><?php _e("Please enter your postal code."); ?></span>
<?php }

Code for saving extra fields details in database:

add_action( 'personal_options_update', 'save_extra_user_profile_fields' );
add_action( 'edit_user_profile_update', 'save_extra_user_profile_fields' );

function save_extra_user_profile_fields( $user_id ) {
    if ( empty( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'update-user_' . $user_id ) ) {
    if ( !current_user_can( 'edit_user', $user_id ) ) { 
        return false; 
    update_user_meta( $user_id, 'address', $_POST['address'] );
    update_user_meta( $user_id, 'city', $_POST['city'] );
    update_user_meta( $user_id, 'postalcode', $_POST['postalcode'] );

There are also several blog posts available on the subject that might be helpful:

  • Bravo this works great.
    – AVEbrahimi
    Mar 15 '18 at 13:31
  • 1
    This isn't storing data from my extra fields in the DB. Suggestions please? Thx.
    – b_dubb
    Jul 3 '19 at 16:12
  • @b_dubb, Can you please share your code? So i'll check and let you know. Aug 2 '19 at 14:38
  • I have resolved my issue but thanks for reaching out.
    – b_dubb
    Aug 5 '19 at 17:31
  • 1
    You should add nonce verification to this to avoid introducing security vulnerabilities. developer.wordpress.org/themes/theme-security/using-nonces Jan 30 '20 at 18:26

The Advanced Custom Fields Pro plugin will allow you to add fields to user profiles without any coding.

  • 3
    Only the pro version Mar 4 '19 at 12:16
  • 2
    There are free ways of doing this with PHP.
    – Drmzindec
    Oct 15 '19 at 9:05
  • 2
    Yep - definitely possible to code this in PHP without ACF if you prefer. My experience is that it takes 100+ lines of code and you need to worry about nonce verification, writing the HTML of the form, etc. Could take a few hours of coding vs. 5-10 min of setup in ACF. Probably depends on if you're using ACF Pro already on a project. Oct 15 '19 at 16:02
  • 3
    Wordpress should do this without asking you to hardcode html forms in php. I second ACF, it should be part of the core. You can also define fields with code and version it.
    – marek.m
    Jan 30 '20 at 14:13

You'd better use get_user_meta (instead of get_the_author_meta):

function extra_user_profile_fields( $user ) {
    $meta = get_user_meta($user->ID, 'meta_key_name', false);

Not the answer you're looking for? Browse other questions tagged or ask your own question.