Thoughts on #wordcampuk 2010

This past weekend was the 3rd WordCamp to be held in the UK and I had a great time both as a speaker and a participant.  It is great to see how the event has grown over the past 2 years from a small affair with around 50 attendees up to one with around 150.

I am really impressed with the way in which a disparate group of people have pulled together with little central coordination and pulled together a great event. However I do think that we need to sit back and reflect on where we have come from where we are going and what is going to serve the community at large.  The community of WordPress users and developers has grown at an astounding rate over the past few years and so has the number of WordCamps.

For me this years WordCamp had some great learning points for how we can do better – these come from things that have affected me directly and also feedback I have received from others.

  • We need to get tickets on sale earlier – people like to organise their weekends and travel in advance
  • We need to organise the schedule better – having focused tracks for different audiences with a list of topics and presenters available in advance so that people can plan their schedule and know what they are going to find out.
  • We need to think about how we lay out the rooms – It was harder to get to know the other attendees this year because we were in front facing lecture theatre style layout rather than the Banquet/Cabaret style layout we’ve used in the past
  • We need to think about naming – WordCamps are big and small and I think that the UK community has reached the tipping point where it could support more than one some years. We could do more to emphasise that by thinking about the name and maybe name the next one after the City/Town/Region that it is held in to make it really obvious that other UK based WordCamps would be great.
  • I think we should try harder to organise some more regional groups to try an emulate the success that has been achieved in Manchester – I wonder how many people would be interested in a monthly WordPress Sussex meetup?  Let me know!
  • We need to think more about the social events – It was great to get to visit FAC251 but it really wasn’t the best venue for networking and talking to other WordPress users / developers – I would have much preferred a quieter venue where I could have actually talked to people and not felt like I was melting.
  • We need to consider focussing on a single kick-ass day of major sessions and the leaving the second day for more informal networking and BarCamp style lightning talks – this is a format that quite a few other WordCamps around the world are using with great success and ensures that there is lots of time for the spontaneous connections to be made.

I know that some of these suggestions may seem controversial, and I’ve read about the wrap-up session that I missed, but we should remember that anyone in the community at large has the right to organise another WordCamp and if there are people in the UK that would like to organise other “competing” events I think we should try as hard as possible to support them in any way we can – we know how difficult it was to get the first event off the ground and have built an infrastructure of contacts and resources that they should be able to leverage to make it easier.

If you want to get involved in organising a WordCamp and want to find out more read on here and if you have any questions feel free to email me!

A better meta API for WordPress

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:

  • Flexibility to easily create a different kind of meta without having to care about adding tables yourself.
  • Ability to store anything in a meta value – i.e. The same kind of functionality we have we options.
  • Ability to get things back based on key ranges or operations – i.e. Getting all cron meta values where the meta key (which would be a timestamp) is before a particular time.

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()

Adding extra user meta fields

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