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()
<?php /* Plugin Name: PJW User Meta Plugin URI: http://blog.ftwr.co.uk/archives/2009/07/19/adding-extra-user-meta-fields 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