209 Responses

  1. Huzzer Magazine
    Huzzer Magazine September 11, 2009 at 12:00 am | | Reply

    Such a great tutorial that you give up there. I will definitely use it for my blog. The best part of the above tutorial is the way you integrate Twitter with user profile – by adding another part of the page when I key in my twitter user profile.

    Besides Twitter’s profile link, it will definitely a good idea to put social bookmarking site especially Stumble Upon’s thumb up icon as I believe that by having that section, it can channel reader’s attention into the section.

    Other than that – link to the latest post of the user maybe – especially for guest blogger as it can help to increase the incentive and motivation of the guest blogger.

  2. Chris Hajer
    Chris Hajer September 11, 2009 at 12:04 am | | Reply

    Hi Justin. Is there a way to extend this to registration, so that the extra fields are required (maybe optionally required, but the input fields would be there) upon registering? Or alternately, maybe just direct people to their profile upon logging in, to complete their profile? I am thinking of using something like this for extended profiles, sort of a membership database, something I haven’t found a good version of yet (and I think you had similar trouble finding a while back?) It’s an area that’s lacking WordPress plugins.

    I would use this for simple things like name, address, phone, interests, etc. All the things you’d need to know about a member of a club.

  3. Jean-Baptiste Jung
    Jean-Baptiste Jung September 11, 2009 at 12:26 am | | Reply

    Justin,
    I’m never disapointed with the quality of your work. This tutorial is simply excellent, I have learnt something soooo cool today :)

    Thanks for sharing all this usefull info with us. Have a nice day!
    Jean

  4. Rarst
    Rarst September 11, 2009 at 2:07 am | | Reply

    As for usage ideas I am slowly planning collaboration/hobby site, most probably on P2 theme (if I don’t find something more fitting).

    I want to give users some degree of control over what parts (probably compartmentalized as widgets) of site they see, as well as option to filter RSS-embebed content with their keywords.

    I hadn’t even started on actual code, but this technique seems like it will be of use. Thanks for explaining it!

  5. visaap
    visaap September 11, 2009 at 2:22 am | | Reply

    This week we decided, for the project I’m involved in, that we want to use extra profile-info which the users can manage by themselves; and here is the answer to it.
    Thanx, it’s really a timesaver and right on time :D

  6. Andrea_R
    Andrea_R September 11, 2009 at 6:34 am | | Reply

    Nicely done – here’s another idea, instead of the code in functions.php, roll it all into one file, drop it in mu-plugins. Add some shortcode options then users across a WPMU install can whip up their own profile area wherever they like.

  7. Adam W. Warner
    Adam W. Warner September 11, 2009 at 7:36 am | | Reply

    Great tutorial Justin, thanks a lot. I had the same thought as Chris above. I know there are a couple plugins out there that attempted the addition of form input fields on the registration form, but if this could ultimately be included in your user role plugin, it would simply be fantastic.

  8. Joost de Valk
    Joost de Valk September 11, 2009 at 1:34 pm | | Reply

    Hey Justin,

    it’s become a lot easier to do this with a patch that I proposed and wrote a couple months back: http://core.trac.wordpress.org/changeset/11784. This is in trunk and will be included, as it looks right now, in 2.9, after that, user fields are filterable, and you could easily add the Twitter profile field just by doing this:

    function add_twitter_contactmethod( $contactmethods ) {
    	// Add Twitter
    	$contactmethods['twitter'] = 'Twitter';
    	return $contactmethods;
    }
    add_filter('user_contactmethods','add_twitter_contactmethod',10,1);

    I’ll do a quick post detailing it all :)

    1. hr
      hr February 11, 2010 at 5:06 am | | Reply

      i use that code but when trying to edit user profiles user.php have error promt

    2. Luis Alberto Ochoa
      Luis Alberto Ochoa February 28, 2011 at 7:55 pm | | Reply

      @Joost de Valk

      Justin only shows a great alternative…

      Justin code is Cool, your code … not …

  9. Andreas Graf
    Andreas Graf September 11, 2009 at 1:38 pm | | Reply

    I could think about custom user fields like “Hobbies”, “Location” or “Occupation” to make the users less faceless.

  10. Joost de Valk
    Joost de Valk September 11, 2009 at 1:44 pm | | Reply

    Post done, check it out: User Contact Fields in WordPress 2.9.

  11. Adam W. Warner
    Adam W. Warner September 11, 2009 at 2:27 pm | | Reply

    I have a feeling your to-do list looks a lot like this.

  12. Amanda
    Amanda September 11, 2009 at 5:44 pm | | Reply

    This is wonderful and so easy to follow, thanks so much for sharing!

    I’m trying to incorporate it into the author archives using this method: http://codex.wordpress.org/Author_Templates

    Is there a way to code the twitter link so that it’ll work outside of the loop?

  13. westi
    westi September 12, 2009 at 3:13 am | | Reply

    Justin this look cool and familiar (http://blog.ftwr.co.uk/archives/2009/07/19/adding-extra-user-meta-fields/)

    With regard to the improvements in 2.9 – what use-case do you have for anything other than a text box for a contact info attribute of a user?

    (BTW – You don’t need the current_user_can() check when processing the new form fields as the capability has already been checked by the main form processing code but it is always better to be safe than sorry)

  14. CG
    CG September 12, 2009 at 3:36 am | | Reply

    i’m doing a site whereby each member has their own post… I’d like to see this profile page used as a means to set up their post…. maybe even incorporate a basic tinymce editor?

  15. Deb
    Deb September 12, 2009 at 4:44 pm | | Reply

    Another very informative post Justin. I keep coming back to your site to learn more. Keep up the good work.

  16. amy gail
    amy gail September 13, 2009 at 3:25 pm | | Reply

    I learn so much from you Justin!
    Thanks for this.

    (may I take this opportunity to tell you how nice it would be to have a search option on your site?)

  17. amy gail
    amy gail September 13, 2009 at 3:37 pm | | Reply

    I’m using something similar to this to add links to iTunes and CDbaby for the discography pages on a site I’m working on (http://burntsugarindex.com/making-love-to-the-dark-ages/) but I think your method is a bit more elegant.
    I’m going to have to revisit that…

  18. amy gail
    amy gail September 13, 2009 at 5:21 pm | | Reply

    You’re right – Not so much user profiles
    - I’m thinking along the line of the way you’ve inserted the twitter user name via custom fields and hooked them into the author meta.

    In my case – each CD has it’s own link to iTunes and CDbaby- I’m using custom fields (in custom single post templates) for that now and it works. Your post has me thinking that I can do it a bit more elegantly.
    That’s all

  19. Movers Clendaniel
    Movers Clendaniel September 13, 2009 at 5:58 pm | | Reply

    I’m jealous- what I wouldn’t give to be able to create this kind of code myself! For now, I’ll just have to rely on you. :-)

  20. Pete
    Pete September 13, 2009 at 7:07 pm | | Reply

    Hey Justin… I would love to see this code along with your user management code to be used for a comprehensive dating site for wordpress…. but integrated with a paypal/different costs for different features thingy.

  21. CG
    CG September 13, 2009 at 8:47 pm | | Reply

    hi Justin.. how would I use this with a text area, checkboxes, drop down list etc…

  22. imtiedup
    imtiedup September 14, 2009 at 9:09 pm | | Reply

    As to extra fields, it would be nice to show either the most recent posts by the user, ‘title-date’ format, or even better allow the author to set permanent links to their favorite posts or both.

  23. John
    John September 16, 2009 at 1:43 pm | | Reply

    This is one area of wordpress that has really been overlooked. So many volunteer organizations use wordpress and could use a membership directory.

    It should be easy to add extra users fields as needed (address, phone, etc).
    The user should have an option button to opt in or out of appearing in the directory.
    The directory would be protected and not viewable unless you were log in.
    The admin would have a slightly different view of directory so everyone is included.
    Even better would be option buttons next to each field to decide which info is ok to display.
    A drag and drop interface to customize where info goes on your directory page.

    This would make wordpress more useful to churches, neighborhood associations, hobby groups etc.

  24. Michael
    Michael September 17, 2009 at 12:30 pm | | Reply

    I’m going to look into doing that – adding custom fields helps your audience tell you more about themselves, and that creates a nice report between you, which, needless to say, is highly beneficial for your blog and online business.

  25. Abu Aufa's Weblog
    Abu Aufa's Weblog September 18, 2009 at 9:17 am | | Reply

    Great tutorial.. Thanks Justin..

  26. Vince
    Vince September 21, 2009 at 6:12 pm | | Reply

    Great TUT! Can you think of a way to add an mp3 upload field that will allow the visitor to listen to an mp3 sample of someone’s music, such as a band?

  27. Edwin
    Edwin September 22, 2009 at 3:38 am | | Reply

    Justin, really a outstanding Tut. Thank you fort sharing this.
    Like Vince I would like to know if there is a way to upload. In my case an .jpg or .gif file.
    Any ideas on that.?

  28. Martin
    Martin September 22, 2009 at 12:26 pm | | Reply

    thats a cool tutorial, thank you very much!
    i’m running a website for a cycling club, and i wanted a (protected) page to list all the members full names and contact info like mail adress, home and work phone nr etc.
    Also, each member should be able to modify his own (but only his) data.
    Think your tutorial gave me exactly the tools needed for this.. :)

  29. manuel
    manuel September 24, 2009 at 9:19 am | | Reply

    great idea.

    short and powerful.

    Thks

  30. rZr
    rZr September 28, 2009 at 8:20 am | | Reply

    Hya, ty for the code/tutorial. You are mentioning an plugin, what will this plugin do exactly?
    Will it add custom fields to User Profile, and automaticly add them to the register process? Maybe also an customized register ‘page’?

    If so I would gladly beta test anything for you. Else I have to write them myself, or together even.

  31. Dan Gayle
    Dan Gayle October 14, 2009 at 12:02 pm | | Reply

    I’ve been working on building up a new theme profile page that conglomerates all of the writer’s social media profiles into one spot, and I think this will work perfectly! Thanks for the tutorial.

  32. tgrimsley
    tgrimsley October 14, 2009 at 2:44 pm | | Reply

    Great work and easy to follow instructions. Keep up the excellent work

  33. Pete
    Pete October 14, 2009 at 8:28 pm | | Reply

    Hi Justin… you still alive these days?

    Just wondering…
    1. Are you planning to release this nifty little code as a plugin?

  34. Manic
    Manic October 16, 2009 at 3:31 am | | Reply

    Thanks for good article. I appreciate your thoughts and information presented at this time.

  35. Nate Williams
    Nate Williams October 16, 2009 at 11:00 am | | Reply

    This is so awesome .. thanks! It would be cool to be able to upload various images as well associated with authors .. that could be your next tutorial .. great work!

  36. Ron
    Ron October 20, 2009 at 2:31 am | | Reply

    You are a bloody champion!!!!

  37. Jauhari
    Jauhari October 24, 2009 at 8:02 pm | | Reply

    I will use it Justin, thanks for this tips

  38. Alex
    Alex October 26, 2009 at 6:38 am | | Reply

    Another very informative post Justin. I keep coming back to your site to learn more. Keep up the good work.
    This is a Life!

  39. slee
    slee October 26, 2009 at 7:58 am | | Reply

    is there a way to add the First Name and Last Name fields onto the regitration page?

  40. Laura Kalbag
    Laura Kalbag October 27, 2009 at 4:42 pm | | Reply

    Awesome tutorial, thanks!

    I’ve used it to create a load of biography fields for a band site, so ‘Instrument’, ‘Musical History’ and ‘Influences’ all feature in there. So cool :)

  41. Patrik
    Patrik November 19, 2009 at 5:37 pm | | Reply

    Great tutorial!!! I just wonder how you get a textarea instead of regular text field?

  42. Steve B.
    Steve B. November 23, 2009 at 3:30 pm | | Reply

    Justin– as always, great tutorial.

    I’d love to take some of these custom fields and show them in the comments form next to “Website” for instance. Is this possible with these custom fields?

    Steve

  43. Debbie
    Debbie December 12, 2009 at 12:55 am | | Reply

    This is a great tutorial.

    I’m doing something similar to what you’ve shown, but have run into one problem – the custom meta data I enter on the profile form gets saved (it displays in my custom author template fine), but once submitted the custom fields are blank on the profile form unless I’m looking at it from within the admin side.

    This is the basic formatting for all the text fields:

    Is there something obvious that I’m doing wrong?

  44. Debbie
    Debbie December 12, 2009 at 12:56 am | | Reply

    Let me try that again:

    <input type="text" name="company" id="company" value="ID ) ); ?>" />
  45. Nirave
    Nirave December 14, 2009 at 7:46 pm | | Reply

    For some reason I can’t get this to work.

    My profile page doesn’t contain the twitter section & going to a post having put the php my_author_box in single.php brings up this error:

    Fatal error: Call to undefined function my_author_box() in /home/mobileus/public_html/blog/wp-content/themes/inove/single.php on line 58

    (line 58 is where the php my_author_box thing is.)

    Anyone help by any chance? (REALLY WANT THIS LOL!)

  46. Daniele Savasta
    Daniele Savasta December 22, 2009 at 12:41 pm | | Reply

    Hi! Thanks for your guide it’s really usefull.
    But I need some more suggestion, what I need to do if I want to upload a pdf file also?
    Something like a resume attached to the profile.
    Thank you so much.

    1. Ben Dunkle
      Ben Dunkle July 30, 2010 at 12:38 pm | | Reply

      I’m interested in this too-how do you make a file upload field? This puts the field on the profile page, but I’m not sure where the resume is going or how to display a link to it on author.php page:

      <input type="file" name="resume" id="resume" value="ID ) ); ?>" />
  47. Mark
    Mark January 2, 2010 at 3:13 am | | Reply

    Hello !This is nice and wonderful, all the tips so easy to follow, thanks so much for sharing! nice post carry on ….

  48. casey
    casey January 6, 2010 at 11:19 am | | Reply

    Justin this is awesome. You just saved me tons of time.

  49. Ron Devito
    Ron Devito January 6, 2010 at 11:53 am | | Reply

    Has anyone attempted to replicate this with friending/supporting on Facebook?

    I successfully implemented this with Twitter.

    Also…any way to add graphics to spruce it up a little bit?

    Thanks much.

  50. Tom Fischer
    Tom Fischer January 7, 2010 at 11:06 am | | Reply

    How can I do the same with checkboxes, textareas etc?? I greatly appreciate any advice anyone can offer with this. Thanks.

  51. Radek
    Radek January 10, 2010 at 8:52 pm | | Reply

    Hi Justin,

    thank you for the tutorial. I am looking around on how to add some custom user profile field and then use it in a condition. Let’s say to give an access to a page only to some users.

    I guess I can use get_the_author_meta for the condition but how can I add the and edit the field by admin?

    I cannot find anything on that.

    Thank you,

    Radek

    1. Radek
      Radek January 15, 2010 at 4:14 am | | Reply

      Hi again. I was not clear the first time. I want only users with admin role to be able to edit the extra profile field and if it is not already there create one. Then I can use get_the_author_meta in a condition. Any idea how to do that? Thank you. R

  52. Riccardo
    Riccardo January 18, 2010 at 11:33 am | | Reply

    Is it possible to add this new fields during the registration process?

  53. Perry
    Perry January 19, 2010 at 10:51 am | | Reply

    Great work mate, you are the php man!

  54. aravind
    aravind January 27, 2010 at 3:52 pm | | Reply

    Fantastic tutorial Justin! Thanks a lot!

  55. MrArrow
    MrArrow January 28, 2010 at 7:35 am | | Reply

    Excellent code. Thanks to this article, I’ve actually taken it several steps further and totally redesigned the user profile form: putting the fields I want, in the order I want them.

    So for my own sanity, I created a separate custom-profile.php file and simply ‘included’ it in the theme’s function.php file.

    Then I hid ALL the default WP user profile areas by adding inline CSS to this custom php file:

    #profile-page h3 {display: none;}
    #profile-page .form-table {display: none;}

    Then I rebuilt the WP user profile form within my custom-profile.php, reusing WP fields where I could (e.g. first name, last name, email, website etc) and creating new fields where I had to e.g. contact details: address 1, 2, 3, 4, zip, tel etc

    I’ve even been able to keep the Password area in (but moved to a more logical section), so users can still change their password.

    The whole user profile section now fits in one screen (no scrolling!).

    1. Mary Ann Stoll
      Mary Ann Stoll January 29, 2010 at 12:24 pm | | Reply

      This sounds fantastic, MrArrow. Can you give us a link?

    2. Radek
      Radek January 30, 2010 at 2:23 pm | | Reply

      hi MrArrow

      that sounds fantastic. Could share your code with us?

  56. Ralph
    Ralph February 1, 2010 at 9:36 am | | Reply

    Thanks for the tutorial Justin. I’m a designer not a developer, so a lot of times my options are limited. I appreciate your work on this subject and will be using the User Profile in sites to come. Keep up the good work!

    Thanks,
    Ralph
    teamcolab.com

  57. Brendan
    Brendan February 11, 2010 at 10:21 am | | Reply

    One more time, trying the code tag…I’m not spamming, I promise!

    Thanks so much for posting this! I’m creating a corporate intranet and this paired with the (modified) WordPress Users plug-in will basically create a mini social network! Good stuff.

    Some people had asked how to do this with other forms of input, and, praise God for it, I figured out how to do it with the select menu! Here’s the code (I don’t know if there’s a way to format it as code?):

    add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
    add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );
    
    function my_show_extra_profile_fields( $user ) { ?>
    
    	Extra profile information
    
    	Favorite Color
    ID ) );
    
    foreach ($fav_color as $fav_id => $fav) { ?>
      <option  id="" value="">
    
      Please select your favorite color from this menu.

    Hope this helps someone!

  58. FlossieT
    FlossieT February 23, 2010 at 10:50 am | | Reply

    This is fantastic and just what I’ve been looking for – we run a multi-author blog, and want to include a list of selected contributors in the sidebar; I’m thinking we can set a custom field for ‘include in sidebar’, and then code a widget to pull through just those contributors that have that flag set.

  59. The Frosty
    The Frosty February 23, 2010 at 1:31 pm | | Reply

    What about radio fields?

    Would this be correct:

    <input type="radio" name="account[]" value="developer" ID ) ) echo 'checked="checked"'; ?> />Developer
    
                	<input type="radio" name="account[]" value="sponsor" ID ) ) echo 'checked="checked"'; ?> />Sponsor

    And would I have to add just one POST, or multiple?

    One:

    update_usermeta( $user_id, 'account', $_POST['account'] );

    Or Two:

    update_usermeta( $user_id, 'account[developer]', $_POST['account'] );
    update_usermeta( $user_id, 'account[sponsor]', $_POST['account'] );

    If I am on the right path.. ;)

  60. The Frosty
    The Frosty February 23, 2010 at 2:21 pm | | Reply

    I figured it out:

    <input type="radio" name="account" value="Developer" id="developer" <?php if ( $account == 'Developer' ) echo 'checked="checked"'; ?> />Developer
      <input type="radio" name="account" value="Sponsor" id="sponsor" <?php if ( $account == 'Sponsor' ) echo 'checked="checked"'; ?> />Sponsor
    
    update_usermeta( $user_id, 'account', $_POST['account'] );
    1. Lili
      Lili July 25, 2011 at 9:49 pm | | Reply

      Hey Frosty,
      I know this is an old post, but I just tried your code, and it adds the field fine, but it doesn’t seem to be “remembered” when I update the profile, did that work for you?
      Please let me know, I haven’t found any resource on radio buttons or anything actually other than text fields…

      Thanks!

      Lili

  61. MoeAlza
    MoeAlza February 27, 2010 at 6:19 pm | | Reply

    So for the first bit of code, where exactly do you place it in the functions.php file?

  62. Jerry
    Jerry March 3, 2010 at 8:47 pm | | Reply

    Justin,

    I’ve added the code above to write to the usermeta SQL table and got it to work in Thesis. But, I’d like to save the new field to the “users” database table instead of the usermeta table. I need to query the users database because I’m attempting to omit authors that have a new_field set to “guest” and would like to use the code below for this.

    $authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE new_field  'guest' ORDER BY display_name"); 

    Any idea how would modify your code above to save to the users databse table instead of the usermeta? To me, the two tables look so different that I decided against just substituting “users” for “usermeta” above. I’m pretty new to coding in WP and appreciate any guidance.

  63. Margarida Fernandes
    Margarida Fernandes March 14, 2010 at 4:14 am | | Reply

    I have been looking how to do this for a couple of days and I was stuck with the code.
    This really works!!
    But I had to change my function to work because I was putting the code outside The_loop. I wanted twitter and facebook to show in the header of every post by the respective author. This is what I did and it works fine.

    <a rel="nofollow" target="_blank" href="" title="Follow  on Twitter" onclick="javascript:pageTracker._trackPageview('/outbound/article/');"><img src="/images/twitter-32.png" alt="Follow us on Twitter" /></a>
    
    <a rel="nofollow" target="_blank" href="" title="Follow  on Facebook" onclick="javascript:pageTracker._trackPageview('/outbound/article/');"><img src="/images/facebook-32.png" alt="Follow  on Facebook" /></a>

    Thank you so much for your input.

    my blog is still in development, that’s why I don’t post the link just yet..

  64. Duane
    Duane March 15, 2010 at 12:19 am | | Reply

    Really great post! Very helpful, I am working on a project where I am using wordpress as a company intranet CMS and this has come very handy. I was sent here from: http://www.dquinn.net/extending-user-profiles-wordpress/ where I had some other great ideas that I integrated into the mix.

    My question for you is can this method be used to create a date of birth field? I want to be able to send birthday cards to each member based on a dob field in the user profile. I am not sure how I would implement this so anything you can contribute would be great.

    Again thanks for the great insight.

  65. Mitch Canter
    Mitch Canter March 16, 2010 at 9:29 pm | | Reply

    I know this is an old post, but it’s still a fantastic resource.

    What most people don’t know is that you can call these fields not only in a function, but also in an author template.

    For example, instead of using the_author_meta, you use
    twitter; ?>

    Allows for some SWEET Mashable style profile pages with bio, social networks, etc on top, and recent posts by author on the bottom.

  66. Ralph
    Ralph April 21, 2010 at 12:43 pm | | Reply

    Justin,

    First off THAN YOU THANK YOU for this post, works perfectly!!! Any ideas on when you’ll release v 0.2 of your members plugin? Would love to make my new fields available upon registering without having to hack any of the core WP files like you mentioned above.

    Thanks again!!

  67. Preston M
    Preston M April 27, 2010 at 5:47 pm | | Reply

    Great information as always. Here is something I’m trying to figure out and I’m not quite sure if that method above works.

    I want to generate automatically unique playerID for each new registered user. This id will be used at live events and later on in a custom app I’m building.

    Later on I want to display this ID view author profile page

    thoughts?

  68. Michael
    Michael May 3, 2010 at 6:22 pm | | Reply

    Really old comment thread I know, but just letting you know I just implemented this on a site I work for that needed a “school” field and it worked like a charm.

    Your tutorials hit the sweet spot of (a) very cool functionality and (b) simple to implement. Thanks a lot.

  69. Dan
    Dan May 5, 2010 at 7:33 pm | | Reply

    I know this is an older thread but I need some help here…

    When I do what is displayed above I can see the fields added to the profile page and when I put data in it goes to the tables, BUT it doesn’t get shown when you go back to the profile page. The fields show blank every time you go back to your profile.

    Again, the data DOES go to the database but does NOT populate the field when I return to the profile page.

    Any ideas? I took the code EXACTLY as in the article.

  70. Rakesh Narang
    Rakesh Narang May 19, 2010 at 10:27 am | | Reply

    Dude seriously your work is awesome but since i am not a coder i didn’t get anything… please help where to add those codes in php after something or just anywhere?

  71. Jonathan Knapp
    Jonathan Knapp June 3, 2010 at 9:24 am | | Reply

    Just a huge FYI, I don’t know exactly why but WordPress does not like form field names with dashes in them. ex) profile-twitter

    I just spent a lot of time watching the saving process fail without any output or reasoning. Hope this helps someone from pulling all their hair out.

  72. Richard
    Richard June 10, 2010 at 6:42 am | | Reply

    What I would do with custom profile fields? I would like to see something like Magic Fields but user centered instead of post centered, where I can add custom profile fields (all types), custom profile write panels for WP backend or even for frontend.

    Then I could turn Wordpress in something like a medical records system, where the patients are registered users. I can display a unique page and capture the current logged in user to fill it with the subscriber medical data.

    I can also make hidden alternate pages and change the author value to a specific user then fill the page with that user information (such as for doctors view).

  73. jason
    jason June 23, 2010 at 2:17 pm | | Reply

    Love your site. I know that this post was written last September, but the function update_usermeta is depreciated in version 3.0 and you should use update_user_meta.

    Keep up the great website. Thank you.

  74. Elektryk
    Elektryk July 8, 2010 at 5:19 am | | Reply

    Hm, is there posibility to save data from custom page in user menu in this way?

  75. Schalk Neethling
    Schalk Neethling July 15, 2010 at 8:08 am | | Reply

    Thanks so much for this awesome article!

  76. Andreas Poloczek
    Andreas Poloczek July 22, 2010 at 4:07 am | | Reply

    Thanks you too for your great article. Maybe you could help me out with a tip…

    I totally stuck with a solution to sort/show last modified user profiles. In theory i thought it may be possible that a hidden field with the actual time and date will be stored in a seperate user_meta field. Everytime when a user hit the button “update profile” a function should store the time/date in a field like “last modified”. This would give the admin the possibilty to show/sort “last modified” user profiles.

    Sorry for the request, but i searched a couple of days for a tip or solution without success.

  77. Andrea Barghigiani
    Andrea Barghigiani August 29, 2010 at 5:15 pm | | Reply

    Hi Justin congrats for the amazing tutorial!

    I am trying to do the same but with checkboxes, just like CG and Tom Fischer.

    In the user profile page I am trying to create a list of selectable checkboxes, because like hobbies the user can have more than one hobby choosable from my given examples.

    The problem is when I am trying to show the saved information of the user the function esc_attr( get_the_author_meta( 'hobbies', $user->ID ) ); does not show nothing.

    The call at the function update_user_meta( $user_id, ‘hobbies’, $_POST['hobbies'] ); is present in to the save function.

    Could you please be so kind to help me up with that?

    Thanks!

  78. WP: Extra Author Info : PubMedia Commons September 7, 2010 at 8:29 am |
  79. Rick
    Rick September 11, 2010 at 12:44 pm | | Reply

    Justin,

    I made an approach to applying taxonomies to user profiles using your code here and modifying it a little bit. If you have the time, I would really appreciate if you could check my detailed post at WordPress.org and let me know what you think.

    http://wordpress.org/support/topic/applying-custom-taxonomies-to-user-profiles?replies=1

  80. Keven
    Keven September 14, 2010 at 12:00 pm | | Reply

    How would you validate your custom fields with WordPress when updating user profile?

    Is there a way to add errors to a global variable object WP_Error or hook to a special function.

  81. Karl
    Karl September 20, 2010 at 6:48 am | | Reply

    Gold man, gold. Been looking how to do this for the last half hour (all the sites i found we’re ancient) so i’m loving you right now.

  82. genoki
    genoki September 26, 2010 at 7:40 pm | | Reply

    I created custom field called ‘location’ in user profile.

    I want to display the new field ‘location’ along with user display name on their comments.

    Example:

    Bob Smith – New York City, NY

    I have been searching for where I can concatenate my new field to the displayed user name.. but not sure.

    I have searched get_author_name in author template and comments area in function.php but nothing is clearly the author name!

    Any pointers? Thx

  83. AANMAWEBMIN
    AANMAWEBMIN October 7, 2010 at 2:04 pm | | Reply

    Does anyone know of a way of: bulk importing _users & _usermeta i.e. users, email, password + address1, address2, city, state etc. into a WordPress system, please.

    So far I have been able to bulk add basic user information with dagondesign.com’s http://www.dagondesign.com/articles/import-users-plugin-for-wordpress/

    But this plugin will only import the core WordPress user data (out of the box) a great solution that has gotten me far but what I need is to import _usermeta also.

    Any help will be greatly appreciated!

  84. Kenti
    Kenti October 10, 2010 at 8:08 am | | Reply

    Strange,

    when i use your code (copy and paste) in my function php, the values are correctly saved in the database and are visible in the user interface but in the admin page the fields are blank. In other words when i came back in the admin page my field “City” is blank and i don’t see the value “London” in it.

    Is there a problem with ID ) ); ?> in wordpress 3.0?

    No problem if i use a non-custon field such as ID ) ); ?>

    If someone has an idea…

  85. Jonathan Clarke
    Jonathan Clarke October 11, 2010 at 4:20 am | | Reply

    Excellent! Just what I need!

  86. Scott
    Scott October 13, 2010 at 11:14 am | | Reply

    Excellent! Still helping newbies over a year later.

    One question is it possible to have these custom fields appear in the Admin -> “Add New User” page? (i.e. user-new.php)

    This works great on the edit profile pages, using the “personal_options_update” & “edit_user_profile_update” hooks.

    My problem is that I think I need to use a new hook “add_action(‘user_registration’,…” or similar to accomplish this. But of course that’s not working for me. Just curious if something like this is even possible.

    Using WP 3.0.1

    Thanks in advance,
    Scott

  87. Thomas
    Thomas October 17, 2010 at 5:39 pm | | Reply

    Hey,
    First off, very helpful tutorial, thanks for writing it. I know it’s a bit late on my part, but in case you still keep up with this page, I was wondering about the best way to update one of the custom user fields from a page other than the profile page. Basically, I’m using user profile fields to store values for an experience-based game and I just need to be able to update the old value with a new value (just contained in another input field on a page) in response to a button click. I know it’ll probably take AJAX to get this done (something about which I know very little) and searching for tutorials has led me to a frustrating dead end. Anyway, if you have any ideas or suggestions, I would be greatly appreciative.

    Thanks very much,

    Thomas

  88. pat
    pat November 9, 2010 at 5:05 pm | | Reply

    thanks for the info. i don’t really get it though. will this allow me to merge custom fields into blog posts, etc? say, i want to merge my name into a post with a custom field, how will this do that? thanks!

  89. Ajay Karwal
    Ajay Karwal November 11, 2010 at 10:51 am | | Reply

    Brilliant!

    This is exactly what I needed… My author page is looking slick now!

    I’ve added twitter and facebook so far, and this is how I’ve displayed them.

    <!-- Check for twitter  -->
    
    <a href="http://twitter.com/" alt="" />twitter</a>
    
    <!-- Check for facebook -->
    
    <a href="http://www.facebook.com/" alt="" />facebook</a>

    This ensures that a field only shows up if the author has filled it in

    I wonder, is there a way of simplifying the IF statement to check ALL custom fields and only spit out those which are filled in?

  90. Aaron
    Aaron November 15, 2010 at 10:56 am | | Reply

    Hello,

    This is a great tutorial, and It helps out a lot. I do have one question, how can I upload several photos into the profile. I want to allow users to upload their photos, and display the photos on their page.

    Thank you,

    Aaron

  91. Jake Rutter
    Jake Rutter November 15, 2010 at 1:52 pm | | Reply

    Could you use custom fields to capture star rating information? There are plugins out there, mostly paid. But a way to do it outside of the plugin might work, especially with new custom post types.

  92. Shag
    Shag December 1, 2010 at 5:18 pm | | Reply

    Howdy. Thanks for the excellent tutorial. I had no problem with the text field and moved on to checkboxes where I’m having some issues. I’m trying to populate a list of checkboxes derived from a custom post type. So I’ve got a custom post type called “Horses” and I want to have a list of those posts on the user’s page. I just can’t get over the hump. Here’s what I have….

    add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
    add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );
    
    function my_show_extra_profile_fields( $user ) { ?>
    
    	Profile Information
    
    	ID); ?>
    			 'client_horses', 'orderby' => 'title', 'order' => 'asc' ) ); ?>
    
    		   		<input value="horse-" id="" name="horses[]" checked="checked" type="checkbox" />
    <?php }
    
    add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
    add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );
    
    function my_save_extra_profile_fields( $user_id ) {
    
    	if ( !current_user_can( 'edit_user', $user_id ) )
    		return false;
    
    	update_usermeta($user_id, 'horses', ( isset($_POST['horses']) ? $_POST['horses'] : '' ) );
    }

    This works fine with a hard coded values but I'm trying to create a unique value using the_ID(); but the_ID doesn't seem to work within the "is_array" (function???)

    it prints out like this:

    as you can see the “546=” is obviously not correct. It should be “checked=”checked”. I’m guessing that this is a php syntax issue caused by my lack of knowledge/understanding.

    Any help would be greatly appreciated.

    thanks, Shag

  93. Shag
    Shag December 1, 2010 at 5:22 pm | | Reply

    that code didn’t print out properly. hopefully this will…

    add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
    add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );
    
    function my_show_extra_profile_fields( $user ) { ?>
    
    <h3>Profile Information</h3>
    
    <?php $horse_array = get_the_author_meta('horses',$user->ID); ?>
    
    <ul>
    
    <?php query_posts( array( 'post_type' => 'client_horses', 'orderby' => 'title', 'order' => 'asc' ) ); ?>
    <?php if (have_posts()) : ?>
    
    <?php while (have_posts()) : the_post(); ?>
    
    <li><input value="horse-<?php the_ID(); ?>" id="<?php the_ID(); ?>" name="horses[]" <?php if (is_array($horse_array)) { if (in_array("horse-".the_ID(),$horse_array)) { ?>checked="checked"<?php } }?> type="checkbox" /><?php the_title(); ?></li>
    
    <?php endwhile; // End the loop. Whew. ?>
    <?php endif; ?>
    <?php wp_reset_query(); ?>
    
    </ul>
    
    <?php }
    
    add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
    add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );
    
    function my_save_extra_profile_fields( $user_id ) {
    
    if ( !current_user_can( 'edit_user', $user_id ) )
    return false;
    
    update_usermeta($user_id, 'horses', ( isset($_POST['horses']) ? $_POST['horses'] : '' ) );
    }

    

  94. shag
    shag December 2, 2010 at 7:31 pm | | Reply

    I ended up figuring this out thanks to some help from a dev buddy. I was using the_ID() which prints the value rather than get_the_ID() which returns the value (I think anyway). So if you use the code above and replace the bit that’s within the loop with this, it should work…

    <?php $horse_id = get_the_ID(); ?>
    <li><input value="<?php echo $horse_id; ?>" id="<?php the_ID(); ?>" name="horses[]" <?php if (is_array($horse_array)) { if (in_array($horse_id,$horse_array)) { ?>checked="checked"<?php } }?> type="checkbox" /><?php the_title(); ?></li>

    And for those curious folks, I used this on the front-end to display the array: (not sure if it’s the best way but it works for me)

    global $current_user;
    $horse_var = get_the_author_meta( 'horses', $current_user->ID );
    $horse_array = implode(', ', $horse_var);
    echo $horse_array;
    1. Kyle
      Kyle February 14, 2012 at 6:14 am | | Reply

      Just wanted to let you know that your solution for displaying on the front end worked perfectly for what I was trying to do. I just couldn’t seem to get the code provided in the original tutorial to display the current users new field information. Using current user instead of user id worked like a charm.
      Thank you so much for posting your solution if you hadn’t I would still be stuck.

      1. Tiffany
        Tiffany May 15, 2012 at 6:33 pm |

        This is harrowing from Adam’s checkbox solution

        Checkbox Test

        ID ); ?>
        		<input TYPE="radio" name="division" value="administration"  />
        		<input TYPE="radio" name="division" value="business_services"  />
        		<input TYPE="radio" name="division" value="educational_services"  />
        		<input TYPE="radio" name="division" value="human_resources"  />
        		Seeing if this works...
        
        	update_usermeta( $user_id, 'division', $_POST['division'] );
  95. Lyndsy Simon
    Lyndsy Simon December 3, 2010 at 9:25 am | | Reply

    Thanks for this! I’m just learning my way around WP, and update_usermeta() puts me on the right track. I’m writing a classifieds ads plugin that supports proper monetization, and planned to tie in regular WP users as posters. This will let me store subscription states and account balances without having to implement my own user classes :)

  96. George B
    George B December 3, 2010 at 3:24 pm | | Reply

    Hi Justin,

    Good stuff! I know I’m pretty late to the party here, but I had an idea. I want users to choose ther country of origin (I work in A very international research lab), probably from a dropdown list, and then have this produce a little flag belw ther avatar / in ther biog.

    I was thinking of having each country in dropdown relate to a 2 or 3 letter code, then have the flag image called from a huge library by <img src="path/countries/flag-.jpg">

    Obviously I’ve not written it in full. Is that possible or practical? I’m very new to wp and php and am learning by looking and tweaking. I think I’m learning how to use php and manipulate the database, but still v early stages!

  97. LMP
    LMP December 12, 2010 at 6:40 pm | | Reply

    What I’d like to see as an addendum to this article is how to get that field to show up in the WP User Listing. Easy, I’m sure. :) This was very useful, thanks.

  98. Aaron
    Aaron December 21, 2010 at 8:16 am | | Reply

    Hello,

    I am using this custom profile code, and it works great. I have created a field called title and one called Department, and I do have a quesiton.

    How can I have these two fields display as read only for everyone else but admin, and allow the admins to edit these. these are fields that I do not want people to be able to edit, so only admins should be able to give each user a different department.

    Thank you,

    Aaron

  99. Aaron
    Aaron December 30, 2010 at 2:32 pm | | Reply

    Hi,

    Does anyone know how to have a dropdown display, like Departments?

    I would like to have in the profile a dropdown that was like so:

    Accounting
    Finance
    Technology
    Online

    Does anyone know how to do this either like this or through an array?

    Thank you,

    Aaron

  100. Clare
    Clare January 1, 2011 at 10:56 am | | Reply

    I was looking for the rest of your series on using custom fields for book reviews when I stumbled across this post – which was next on my to do list!

    It would be great if you could link your series posts together – I hear you can do that with a custom field too ;)

  101. shashank
    shashank January 7, 2011 at 2:52 pm | | Reply

    Hey Guys,

    I am trying to give user a capability to add a new page by filling out extra fields in the user profile. Using the above code i have added two fields namely:
    1) Page Title
    2) Page Content

    But i want this page to be published when the user clicks the update profile button.

    can anyone help me with this???

    Thanks

    1. Matt Price
      Matt Price February 17, 2011 at 1:55 pm | | Reply

      @shashank, if you ever figured out how to do that I’d loveto know. I’ve just asked a similar question in the worpdress forums, http://wordpress.org/support/topic/collecting-richer-data-from-user-profiles-and-creating-pages-from-it, feel free to post there as well if you like. Thanks!

  102. Ayaz Malik
    Ayaz Malik January 10, 2011 at 5:36 pm | | Reply

    Hey,
    Awesome tut bro helped me tons.
    there is one part tho im confused and stuck at. how to add checkboxlist (consisting of about 10-15 options) in the user settings page.. and afterwards getting the values on some custom page.
    If you can help me with that it would be awesome :)
    cheers

  103. Neil
    Neil January 25, 2011 at 6:55 am | | Reply

    Okay, so I’m almost there. After searching for hours I have found what I am looking for, but this is scaring me (I’m too new!) – could you tell me is it possible to do this via OpenHook and how??? Thanks

  104. Jean
    Jean February 11, 2011 at 10:38 am | | Reply

    Hi, great tutorial it works fine for me, but I’m trying to display the extra field information on the user.php screen.

    How can I display an extra field from the user profile into User Manager on the Admin Panel wich call user.php

  105. ismail mert
    ismail mert February 12, 2011 at 6:30 pm | | Reply

    i use this codes and modiyied

    thank you justin i have been using your theme “options”

    take care

  106. joey
    joey February 22, 2011 at 5:55 pm | | Reply

    wow, after a couple years this tut still works. thanks for making this easy.

  107. Ac
    Ac February 24, 2011 at 10:42 pm | | Reply

    Is there way to disable the editing of the meta data?
    We have an interesting situation here where we need to have a meta field called “user_balance”, and we need to show it. but the user should not be able to edit it ( obviously!), is there a way to make this happen?

  108. Can Sinan Artuç
    Can Sinan Artuç February 28, 2011 at 12:00 pm | | Reply

    Thank you for sharing this knowledge. I applied to my multi-user blog as Twitter and Facebook.

  109. ken
    ken March 15, 2011 at 8:42 am | | Reply

    Is there a way to only add this information to the back-end of wordpress when the admin is the only one creating the user accounts?

    I have found plug-ins that do allow for extra fields after the account is made but not at the initial creation. Also like Ac above, those fields would be nice to have as read-only by the actual user.

  110. Scott
    Scott March 15, 2011 at 1:56 pm | | Reply

    I have the same question as Ken. Is it possible to use this on the -> “Add New User” page? (i.e. user-new.php).

    Possibly with a new hook? “add_action(‘user_registration’,…” or similar??

    Thanks,
    Scott

  111. samir
    samir March 29, 2011 at 7:53 am | | Reply

    It is really a nice tutorial.
    It adds custom fields to the adduser page.
    Is there a way that i can import users with custom fields like (country,region,zip,club) etc.?

    thanks a lot.

  112. Richard Cummings
    Richard Cummings April 14, 2011 at 4:27 pm | | Reply

    Justin, very nice tutorial. I have looking at adding a Twitter box here and this was very helpful. Cheers, Richard

  113. nichive
    nichive April 23, 2011 at 8:33 am | | Reply

    I managed to implement your code, Justin. Thanks, you’ve saved my time.
    One more thing I need to accomplish, is to allow my user to upload two images on their profile.

    I just haven’t come up with any solution regarding file uploads, can you help me?

  114. Jai
    Jai April 29, 2011 at 7:16 am | | Reply

    That was very useful. Was working on a user registration page & didnt realize how to add custom fields – this saved my day…

    thanks

  115. Mikkel
    Mikkel May 4, 2011 at 1:04 am | | Reply

    Thanks for a great tutorial. Definitely the best one around for adding extra fields. I followed your guide and had no problems.

    I do however have a question: Is it possible to disregard empty fields?

    In your example, if someone doesn’t have a twitter account it looks stupid with an empty field. Does anybody know how to exclude empty user fields?

  116. jafar
    jafar May 13, 2011 at 6:15 am | | Reply

    Hi
    Thanks for a nice tutorial.
    I need a thing that gives us a code after or beetween register(sign up)
    for exaple : xyutr3

  117. Matt Price
    Matt Price May 18, 2011 at 11:25 pm | | Reply

    @mikkel — I don’t have the solution right in front of me, but I think it’s pretty straightforward to make display of the extra fields conditional on the value of that field being non-null. I think you’ll find more info on codex.wordpress.org. And I think maybe there’s even some hint of how to do it somewhere in the comments here. Hope that helps a little bit.

  118. Neil
    Neil May 24, 2011 at 12:17 am | | Reply

    I just wrote a tutorial on this, but taking a different approach. In it’s current state it doesn’t use the functions.php page but, instead, a page template for the profile.

    One thing I haven’t quite figured out is how to add profile images using an upload field. I can do this outside of wordpress, but inside any core functions require it to be attached using a post ID. Any thoughts on that would be awesome.

    The tutorial is Wordpress: Custom Profile Page

  119. Random Joe
    Random Joe June 2, 2011 at 9:06 am | | Reply

    The easiest way to add custom fields in registration form is installing s2Member plugin. Its a membership subscription plugin that integrates with Paypal. Very awesome to use.

  120. Michael
    Michael June 10, 2011 at 5:22 pm | | Reply

    Hi Justin!

    Awesome article, this helped a lot in terms of getting things started on my author profiles. It also worked great sticking this into an author card at the end of posts. I had a quick question though.

    I have a game review website and I’m creating an author profile page and your technique for adding fields worked great. I’m just having issues displaying that data in an author page. I duped my archive.php and using that as a base for the author page template. I’m creating the extra fields for xbox live user name, wii friend code #, Games currently played etc. I can code html/css and very light php, and have been researching this a ton your site has brought me the closest to where i need to be. The goal is to create a cool Author section at the top of their related posts. Can you point me in the right direction or show an example of how to display custom field data in an author page? I’ve been experimenting and doing a lot of searching but haven’t been able to get this to work. Any help is greatly appreciated.

    Thanks,
    -Mike

  121. Adrian
    Adrian July 5, 2011 at 4:07 pm | | Reply

    Great article Justin,

    I’ve stumbled across a problem: the custom fields aren’t saved into the ‘old_user_data’ object when accessing the profile_update action hook.

    A client wants to know only the fields that a user changes each time they update their profile. The custom fields come through identical in the new and old objects.

    Have you experienced this before and is there a way to store these custom fields so we can tell which have changed?

    Cheers,
    Adrian

  122. Gustavo
    Gustavo July 8, 2011 at 6:49 am | | Reply

    Great tutorial. How can I make the new fields mandatory? Thanks.

  123. andrew
    andrew July 12, 2011 at 12:12 pm | | Reply

    is there a plugin that do this for me? im a noob at coding and i need to put this in a page. i already made some aditional fields with the register plus redux plugin but i cant show them in a page. thanks!

  124. Adam
    Adam August 2, 2011 at 11:23 am | | Reply

    For anyone trying to add a checkbox, this works for me:

    1. Adam
      Adam August 2, 2011 at 11:27 am | | Reply

      Err that didn’t come out right. Code here: http://snipt.org/xmUl

  125. cris
    cris September 5, 2011 at 2:58 am | | Reply

    Hello justine,
    does this works also on Classipress? It is a classified wordpress theme.
    tks
    Cris

  126. Nirmal Sahoo
    Nirmal Sahoo September 13, 2011 at 4:10 am | | Reply

    Hi, Is there any way, I can add some fields over the “Add New User” page at the Admin end ? These above said methods displays the extra fields on the Profile page. I want to have some fields which should be displayed while creating a new user and should be saved in the usermeta table.

    Of course I don’t want to hack the core…

  127. Ba1drick
    Ba1drick September 22, 2011 at 12:02 pm | | Reply

    Hi Justin,

    Any idea how to display contents of that custom field inside of another function?

    $agent = ”.get_the_author_meta(‘agenttitle’, $user->ID) .”;

    echo $agent;

    Doesn’t do it.

  128. Michael Dorf
    Michael Dorf September 28, 2011 at 12:33 am | | Reply

    Just stumbled on this tutorial – needed to add extra fields for storing Google+ and Facebook info for a user. Copy/paste, enter, enter, done! I wish all tutorials were this effective! Thanks!

  129. MadsRH
    MadsRH October 6, 2011 at 3:29 pm | | Reply

    Great tutorial, but can I save data from radio buttons? I’ve tried the suggestion above, but it doesn’t save the data :-(

    This is my code: http://pastebin.com/cbf98YrH

    I hope you can help me.
    //Mads

  130. Aidan Boyle
    Aidan Boyle October 11, 2011 at 3:27 pm | | Reply

    Thanks so much for this tutorial Justin. This was such a lifesaver one of my projects I’m working on and is going to be key in another project coming up. This was so awesome!

  131. sabali
    sabali October 12, 2011 at 3:43 pm | | Reply

    thanks very much for this tutorial Justin. I have not tried it on my site but already it has given me a full incite to doing so.

    Thanks very much

  132. jhuna
    jhuna October 14, 2011 at 2:24 am | | Reply

    Hi! Is it possible to use this code for per user basis? not only for the admin? I’d love to add this in my future site.

    Hope you can get back to me asap! :)

    thanks!!!

    Btw, this is great!

  133. Tiago Celestino
    Tiago Celestino October 26, 2011 at 2:34 pm | | Reply

    If you use textarea, use it’s:

    http://pastebin.com/KwSD04XE

  134. Mauricio
    Mauricio October 31, 2011 at 12:58 pm | | Reply

    Thank you so much!!!

  135. Derek
    Derek November 3, 2011 at 9:07 am | | Reply

    Aside from requiring the extra custom fields that you add with your code above, after you add your code to display the extra fields and the code to save them, when you goto register a new user, will the extra fields be form elements in the reg form for the user to input right away, or just an after thought for me or them to add to their profile after they register?

    Also, based on when you say “Note that if you want to add more fields, copy that and change twitter to something unique for each additional field. Just make sure you change each instance of twitter.” Does that mean we have to keep the ‘twitter’ name for the custom field, or each custom field would be called whatever it’s for?

  136. Juan
    Juan November 10, 2011 at 5:02 am | | Reply

    Great post, Justin, it has helped me a lot!!

    Is there anyway of showing a list of authors that have that field filled? Or imagine that the field is a radio type, how could I show a list of authors that have selected one or the other option (just if you have the time to answer)? Thank you again!

    1. Juan
      Juan November 10, 2011 at 5:28 am | | Reply

      Found, with get_users() using the meta_key and meta_value fields. Thanks again!

  137. Dominor Novus
    Dominor Novus November 22, 2011 at 5:38 pm | | Reply

    Very helpful, thanks. I’ll be using this for a website that displays each author’s Skype status on the authors.php page template. The additional profile field will be used to store the Skype user ID. I agree that there’s a ridiculous amount of potential for additional profile fields, especially if the edit profile page is realized in the front-end allowing complete customization.

  138. Richard
    Richard November 30, 2011 at 4:02 pm | | Reply

    So, I guess this change/addition didn’t find it’s way into version 0.2 of the Members plugin then? I installed the members plugin, and I don’t see anything new about custom profile fields. :-(

  139. James R
    James R December 7, 2011 at 3:52 am | | Reply

    Thank You, I am going to use this on a diet site so people can track their weight and see how far they have until they get to their goal weight.

    Do you know of a way where I can have them update say there current weight and it would keep track of all last saves?

    So if they update the weight every 3 days they would end up with a list.

    200 lbs
    198 lbs
    195 lbs

    and so on and so one.

    I would love a way to make this automatic/ish for the end user.

  140. Mike
    Mike December 8, 2011 at 1:05 am | | Reply

    Reading this gave me a very great idea on my next project. Thank you.

  141. Pat Quintin
    Pat Quintin December 10, 2011 at 7:23 pm | | Reply

    Hi,
    Thanks so much for this helpful article!

    I used this on a site I built for a bike racing team, so the guys could add info from two select lists (racing category and age group). The selections are definitely saved and can be seen in the team list on the front end, but when the user logs in to edit his profile, the previously-set options are not selected and will be lost if the user doesn’t set them again before saving his profile.

    Is there a better way to do this, or do you know of a way to force-select the options in the user profile page?

    cheers,
    pq

  142. Nathan
    Nathan December 20, 2011 at 10:30 am | | Reply

    This is no longer working, would be great if you could update it, Justin!

  143. Rich Helms
    Rich Helms December 21, 2011 at 3:42 pm | | Reply

    Nathan

    I found I had to change the top part to

    value=”ID, ‘twitter’ ) ; ?>”

    I wasn’t getting any values from the WP 3.3 system

  144. Rich Helms
    Rich Helms December 21, 2011 at 3:43 pm | | Reply

    Sorry, the comment system removed part of the code

    echo get_usermeta($user->ID, $metaname )

    in the value startment

  145. Rich Helms
    Rich Helms December 21, 2011 at 3:43 pm | | Reply

    sorry again. The $metaname is from my code

    echo get_usermeta($user->ID, ‘twitter’ )

    That works.

  146. Chris Silverman
    Chris Silverman January 3, 2012 at 3:45 pm | | Reply

    Thanks, Justin, this was exactly what I needed. Only problem was that I was using a textarea instead of an input field, which broke it. Tiago’s comment above really helped:

    http://pastebin.com/KwSD04XE

    Also, I noticed that update_usermeta has been deprecated since 3.0. The new function seems to be identical, just with an underscore between user and meta:

    http://codex.wordpress.org/Function_Reference/update_user_meta

  147. nikhil
    nikhil January 4, 2012 at 1:34 pm | | Reply

    Really Cool description. Thank you for sharing it.

  148. Chris
    Chris January 6, 2012 at 12:39 pm | | Reply

    So we had a developer create wordpress blog who i believe used this exact code to create profile fields for our users, I am trying to take this now a step further. The two custom fields we have are Location and Program, where the user can indicate where they are and what program they are with. I am trying to create a page that filters on these two fields, so for all the users who have Rome, Italy it will return all the bloggers who have this. Or if someone clicks on a Program title it will filter all the users who have that program name. Can anyone help me get started on how to accomplish this?

    The two fields currently just pull the text:

    Any help would be most appreciated.

  149. Chris
    Chris January 6, 2012 at 12:42 pm | | Reply

    sorry it keeps erasing, tried to surround it with tags

    the_author_meta  ('location', $author   ->post_author);
    the_author_meta  ('program', $author   -> post_author);
  150. Suzette
    Suzette January 13, 2012 at 3:39 pm | | Reply

    Thank you, thank you, thank you for this. I have been searching the internet for almost a week for this solution for my members listing wordpress site. For someone who doesn’t know much about php, your directions were very clear and easy to follow/ implement. Good Job!!!

  151. Steve
    Steve January 13, 2012 at 11:10 pm | | Reply

    Hello,

    I have learned from your and other websites about how to add custom fields to the wordpress profile page. Is there a way to place them between the “Biographical Info” text box and the “Change password” field? I want to add 7 custom fileds to the profile page, but want them placed in this exact spot. How can I do this? Is this something that may require javascript? Please advise. Thanks in advance!

  152. Denis
    Denis January 22, 2012 at 2:16 am | | Reply

    Thank you Justin for this great tutorial!
    Also thank’s a lot to Chris Silverman who noticed that update_usermeta has been deprecated since 3.0 and update_user_meta should be used instead.

    Works perfectly with 3.3.1.

    Thank’s again!

  153. Suraj Shakya
    Suraj Shakya January 28, 2012 at 4:16 am | | Reply

    Hi,

    Your tutorial is really helpful. Currently i’m using the plugin “Cimy User Extra Fields”. But i want the repeating field to add user achievements which had icon and textarea for each achievement.

    Can you help me how to implement it?

    Thanks in advance.

  154. leo
    leo February 1, 2012 at 9:08 am | | Reply

    thxs man i will use it in future for own site!!!

  155. Natalya
    Natalya February 7, 2012 at 10:22 pm | | Reply

    Hi,

    I am trying to add 2 custom fields to my user profile:

    add_action( 'show_user_profile', 'extra_user_profile_fields' );
    add_action( 'edit_user_profile', 'extra_user_profile_fields' );
    
    function extra_user_profile_fields( $user ) { ?>
    
    <textarea rows="5" cols="5" name="notes" id="notes" value="ID ) ); ?>" >
    
      <option ID ) ); ?>>Private
      <option ID ) ); ?>>Public
    <?php }
    
    add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
    add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );
    
    function my_save_extra_profile_fields( $user_id ) {
    
    	if ( !current_user_can( 'edit_user', $user_id ) )
    		return false;
    
    	update_usermeta( $user_id, 'status', $_POST['status'] );
    	update_usermeta( $user_id, 'notes', $_POST['notes'] );
    }

    for some reason when I click update profile the entered information doesn't stay. However it does work with input type. Could you help me to save the entered information for select and textarea type fields?

    thanks,
    natalya

  156. Michael Shearer
    Michael Shearer February 15, 2012 at 2:09 pm | | Reply

    Hi,

    I am trying to add a field that I’ve created using your method above. It works fine on the profile page, but I’m trying to integrate it with an idea found on this thread:

    http://wordpress.org/support/topic/custom-edit-profile-page

    I am not using CIMY extra user fields. The text box for updating the field shows fine but it is not updating. I am wondering if there is an input value I need to use that utilizes the save_extra_user_profile_fields function.

    Any thoughts? Thanks!

  157. Brandon
    Brandon February 23, 2012 at 8:11 pm | | Reply

    This is really useful. Thanks so much!

  158. GB
    GB February 28, 2012 at 7:59 am | | Reply

    This is exactly what I’m looking for, thanks! I have modified it slightly so that the input field is a custom textarea field instead. It works, given that the data that I save in the user profile shows up on my website. However, once the data is saved in the user profile, what has been entered is no longer visible in the textarea box itself in the WP user profile page.

    Here is my code, any help truly appreciated, thanks!

    /* EXTRA USER FIELDS FUNCTIONS -BEGIN */
    /* Adding custom user field */
    add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
    add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );
    function my_show_extra_profile_fields( $user ) { ?>
    	Extra profile information
    
    			By‌line credit
    
    				<textarea name="byline" style="width: 500px; height: 200px;" id="byline" value="ID ) ); ?>" class="regular-text" />
    
    				Please enter a two sentence description of yourself. This will go at the bottom of the emailed notes.
    
    	<?php
    }
    add_action( 'hybrid_singular-post_after_singular', 'my_author_box', 10 );
  159. Johnny
    Johnny March 14, 2012 at 4:45 pm | | Reply

    I did exactly as Justin Tadlock told me to do in his tutorial. The field can be displayed. But it can’t be saved. Why? The code I put in the file functions.php is as follow:

    add_action( 'show_user_profile', 'my_show_extra_profile_fields' );
    add_action( 'edit_user_profile', 'my_show_extra_profile_fields' );
    add_action( 'personal_options_update', 'my_save_extra_profile_fields' );
    add_action( 'edit_user_profile_update', 'my_save_extra_profile_fields' );
    
    function my_save_extra_profile_fields( $user_id ) {
    
    if ( !current_user_can( 'edit_user', $user_id ) )
    return false;
    
    /* Copy and paste this line for additional fields. Make sure to change 'twitter' to the field ID. */
    update_usermeta( $user_id, 'usermemo', $_POST['usermemo'] );
    }
    
    function my_show_extra_profile_fields( $user ) { ?>
    
    Extra profile information
    
    usermemo; // textarea_escaped ?>
    
    <?php }
  160. brasofilo
    brasofilo March 15, 2012 at 8:23 pm | | Reply

    using this code (and creating the respective files) you can fully customize CSS and jQuery of the Profile page:

    add_action( 'admin_print_scripts-profile.php', 'custom_profile_style', 0 );
    add_action( 'admin_print_scripts-user-edit.php', 'custom_profile_style' );
    function custom_profile_style() {
    	wp_register_style( 'custom_profile', get_stylesheet_directory_uri() . '/css/profile.css' );
    	wp_enqueue_style( 'custom_profile' );
    	wp_register_script( 'custom_profile_js', get_stylesheet_directory_uri() . '/js/profile.js' );
    	wp_enqueue_script( 'custom_profile_js' );
    }
  161. Rob Steiner
    Rob Steiner April 11, 2012 at 7:15 pm | | Reply

    No need to c&p each field:

    $v)update_usermeta( $user_id, $k, $v );
  162. matthew w
    matthew w April 12, 2012 at 8:36 pm | | Reply

    2.5 years old, and the code still works like a charm. thanks! justin is a real life saver.

  163. Monika
    Monika April 16, 2012 at 7:12 am | | Reply

    yes it works like a charme, but there are some deprecated functions this days

    http://codex.wordpress.org/Function_Reference/update_usermeta

  164. John
    John May 1, 2012 at 8:34 am | | Reply

    I followed Justin’s instructions exactly and get some author info displayed with posts, including author’s username, avatar, and biographical information, but no Twitter username. Any suggestions?

  165. John
    John May 1, 2012 at 8:57 am | | Reply

    Figured it out – a css issue. I removed ‘class=”twitter clear”‘ and works great!

Leave a Reply

By submitting a comment here you grant this site a perpetual license to reproduce your words and name/Web site in attribution.

Please use your real name or a pseudonym (i.e., pen name, alias, nom de plume) when commenting. If you add your site name, company name, or something completely random, I'll likely change it to whatever I want.