I want to allow the admin of a site I'm building to highly customize the WordPress user. This will be a highly advanced plugin so I'm fine creating a whole new page in the admin to do this customization (to avoid the weak hooks in the current user admin page).

How can I enable the admin to easily create custom fields of different types without coding? It is kind of like a custom meta box, but for users instead of posts.

I know BuddyPress does this for the front end, the latest version 1.5 is quite powerful. I'm sure it could be adapted for the admin area, but that might be a lot of work. I also have coded a custom solution, but it is feature poor at the moment and I'm wondering if there is a better solution out there.

  • If the plugin I suggested does not suffice, it would be helpful, if you both provided the code of your solution (link to it, if it's too much to post) as well as elaborate on what features you've got down and what you're looking to further implement. Nov 13, 2011 at 3:23

2 Answers 2


There is an excellent plugin solution for this: CIMY user extra fields

I'm all for control and pro writing your routines, if ready-made solutions are not 100% satisfactory, but in the case of extended user profiles I have never seen the need. I am using this plugin myself on 2 production sites, very happy with it.


If you didn't want to go a plugin route you could build it directly into your theme using default wordpress actions. The first function will create new sections on the user profile screen and the 2nd function will add/remove from the default user profile settings.

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

function be_show_extra_profile_fields( $user ) {
    <h3>Extra Contact Information</h3>

    <table class="form-table">
            <th><label for="contact">Contact Number</label></th>
                <input type="text" name="contact" id="contact" value="<?php echo esc_attr( get_the_author_meta( 'contact', $user->ID ) ); ?>" class="regular-text" /><br />
                <span class="description">Please enter your phone number.</span>
add_action( 'personal_options_update', 'be_save_extra_profile_fields' );
add_action( 'edit_user_profile_update', 'be_save_extra_profile_fields' );

function be_save_extra_profile_fields( $user_id ) {

    if ( ! current_user_can( 'edit_user', $user_id ) ) {
        return false;

    update_usermeta( $user_id, 'contact', esc_attr( $_POST['contact'] ) );

Below is the function i usually use to get rid of outdated social platforms and add some new ones for users. It could easily be repurposed for what you're wanting I think.

add_filter( 'user_contactmethods', 'be_hide_profile_fields', 10, 1 );
function be_hide_profile_fields( $contactmethods ) {

    $contactmethods['twitter'] = 'Twitter';
    $contactmethods['facebook'] = 'Facebook';
    $contactmethods['linkedin'] = 'LinkedIn';
    return $contactmethods;

If you wanted to add something else, say a phone number to that you could just add something like

$contactmethods['phonenumber'] = 'Phone Number;

to the function above and it will create the field for you.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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