Last night there was a discussion as to what could be achieved today as part of a “WordHack” session at WordCamp UK and SimonD tweeted that he would like to be able to add extra user meta fields to the back end user profile page easily.
I tweeted back that it was already easy and so here is the proof of concept code which shows you:
- How to add a user meta field to the page
- How to process the new value when it is updated.
These can the been displayed on the front-end using the standard template tags get_the_author_meta()
and the_author_meta()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | <?php /* Plugin Name: PJW User Meta Description: Allows users to configure some random extra meta value. Author: Peter Westwood Version: 0.02 Author URI: http://blog.ftwr.co.uk/ Use of the frontend as get_the_author_meta('something') or the_author_meta('something') */ class pjw_user_meta { function pjw_user_meta() { if ( is_admin() ) { add_action( 'show_user_profile' , array (& $this , 'action_show_user_profile' )); add_action( 'edit_user_profile' , array (& $this , 'action_show_user_profile' )); add_action( 'personal_options_update' , array (& $this , 'action_process_option_update' )); add_action( 'edit_user_profile_update' , array (& $this , 'action_process_option_update' )); } } function action_show_user_profile( $user ) { ?> <h3><?php _e( 'Other Contact Info' ) ?></h3> <table> <tr> <th><label for = "something" ><?php _e( 'Something else' ); ?></label></th> <td><input type= "text" name= "something" id= "something" value= "<?php echo esc_attr(get_the_author_meta('something', $user->ID) ); ?>" /></td> </tr> </table> <?php } function action_process_option_update( $user_id ) { update_usermeta( $user_id , 'something' , ( isset( $_POST [ 'something' ]) ? $_POST [ 'something' ] : '' ) ); } } /* Initialise outselves */ add_action( 'plugins_loaded' , create_function( '' , 'global $pjw_user_meta_instance; $pjw_user_meta_instance = new pjw_user_meta();' )); ?> |
Enjoy!
Updated to correctly use the $user/$user_id
passed to the actions rather than the global $user_id