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

A better meta API for WordPress
July 23rd, 2009
One of the things that we have being discussing for a very long time is extending WordPress with a comment meta api or even the idea of a generic meta api for WordPress and indeed this is something we are discussing at the moment and I thought I would jot down some thoughts on what I would like to see from an API point of view. Over the weekend at WordCamp UK we also heard about situations where some people are already adding comment meta tables for plugin usage and so the demand is definitely there.
I don’t really care how the data is stored, be it single table or multi table, all I care about is having a good stable API for plugins and the core to work with. If the API is good and well thought out they don’t need to care about the table structure and we can always change it later.
Therefore I thought I would summarise the features I would like to see in a generic meta api:
So I am thinking of an api like this:
/* * Register a new meta type. * If we have a table per meta this will create the table for you if required */ register_meta_type('cron'); /* * Returns the meta value for a particular key */ get_meta_value('cron', $key); /* * Sets the meta value for a particular key */ set_meta_value('cron', $key, $value); /* * Returns the meta values for a particular key based search */ get_meta_values('cron', $search_value, $search_type); /* * Deletes the meta value for a particular key */ delete_meta_value('cron', $key);I would envisage us enabling the use of the new api with wrapper functions for different meta types as required. These wrapper functions would only be included if required, for example we could create a comment_meta wrapper api around these generic meta api functions which would only be available if a plugin / theme called
enable_comment_meta_api()Posted in Development, WordPress | Read 10 Comments