I would recommend using a custom taxonomy for this, not a custom field. You can sort and list archives based on a taxonomy far more easily than by custom fields.
However, if you want to list based on the custom field, you’re going to need to modify the arguments sent to query_posts()
on your archive page to pass in the meta_key
and meta_value
you’re searching by.
To add your query variable:
add_action('init', 'add_custom_meta_url');
function add_custom_meta_url() {
global $wp,$wp_rewrite;
$wp->add_query_var('location');
$wp_rewrite->add_rule('location/([^/]+)','index.php?location=$matches[1]','top');
$wp_rewrite->flush_rules(false); // This should really be done in a plugin activation
}
Then, your permalinks for the archive will become something along the lines of http://mycoollocationsite.com/location/england
http://mycoollocationsite.com/location/ireland
http://mycoollocationsite.com/location/usa
… etc …
Next, you’ll need to add whatever value was passed in to your location to the actual query:
add_action('parse_query', 'apply_custom_meta_to_query');
function apply_custom_meta_to_query(&$query) {
if (isset($query->query['location'])) {
$query->query_vars['meta_key'] = 'location';
$query->query_vars['meta_value'] = $query->query['location'];
unset($query->query_vars['location']); // You don't need this
}
}
I’m assuming you’re storing your custom data in a field called location
… so change that if I’m wrong.
But this will allow you to filter your archives based on a specific location. If you want to enable date-based archives with this as well that will require some additional rules in my first code block (right now, this would display a list of all posts with a location
meta_key).
Still, I recommend using a custom taxonomy instead. It’s cleaner, more extensible, and requires less custom coding. This is also exactly the situation for which custom taxonomies were created … so please, don’t reinvent the wheel …