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.
0
3 Answers
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">
<tr>
<th><label for="address"><?php _e("Address"); ?></label></th>
<td>
<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>
</td>
</tr>
<tr>
<th><label for="city"><?php _e("City"); ?></label></th>
<td>
<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>
</td>
</tr>
<tr>
<th><label for="postalcode"><?php _e("Postal Code"); ?></label></th>
<td>
<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>
</td>
</tr>
</table>
<?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 ) ) {
return;
}
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:
7
Bravo this works great.
This isn’t storing data from my extra fields in the DB. Suggestions please? Thx.
– b_dubb@b_dubb, Can you please share your code? So i’ll check and let you know.
I have resolved my issue but thanks for reaching out.
– b_dubbYou should add nonce verification to this to avoid introducing security vulnerabilities. developer.wordpress.org/themes/theme-security/using-nonces
The Advanced Custom Fields Pro plugin will allow you to add fields to user profiles without any coding.
4
Only the pro version
There are free ways of doing this with PHP.
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.
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
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);
}
1
both works with no problems!