<?php
/*
Plugin Name: Test
Plugin URI: http://dd32.id.au/test-plugin/
Description: Test
Version: 1.0
License: GPL
Author: DD32
Author URI: http://dd32.id.au/

NOTE: This was updated for WordPress ~2.5+ on 10/June/2009

*/

add_action('template_redirect''test_template');
function 
test_template($arg){
    global 
$wp_query;
    
//var_dump($wp_query->query_vars);
    
if ( !isset($wp_query->query_vars['artist_slug']) )
        return 
$arg;
    
    die(
"Plugin for Artist: <strong>" $wp_query->query_vars['artist_slug'] . "</strong> page: <strong>" $wp_query->query_vars['artist_page'] . "</strong>");
    
}

// March 2012 update: Look into using add_rewrite_rule() instead here
//If the rewrite rules are regenerated, Add our pretty permalink stuff, redirect it to the correct queryvar
add_action('generate_rewrite_rules''test_add_rewrite_rules');
function 
test_add_rewrite_rules$wp_rewrite ) {
    
$new_rules = array( 
                         
"(artist)/(.*)/(.*)" => 'index.php?artist_slug=' $wp_rewrite->preg_index(2) . '&artist_page=' $wp_rewrite->preg_index(3),
                        
"(artist)/(.*)" => 'index.php?artist_slug=' $wp_rewrite->preg_index(2),
                        
"(artist)" => 'index.php?artist_slug=index',
                        
'^shows.xml$' => 'index.php?artist_slug=index'
                            
);
//, 
    
$wp_rewrite->rules $new_rules $wp_rewrite->rules//NOTE: You must add it to the start of the array, Else WP's greedy rules at the end of the array will eat the request
}

//Add a Query Var, This allows us to access the query var via $wp_query
//Without this the rwwrite rules wont affect us, All arguements you specify via WP's Rewrite engine do not appear in $_GET/$_REQUEST, they only appear in $wp_query->query_vars
add_filter('query_vars''test_queryvars' );
function 
test_queryvars$qvars ){
    
$qvars[] = 'artist_slug';
    
$qvars[] = 'artist_page';
    return 
$qvars;
}

//Add a Activation hook for the current page:
//register_activation_hook(__FILE__,'test_flush_rules');
add_action('init','test_flush_rules');
function 
test_flush_rules(){
    
//Flush the rewrite rules so that the new rules from this plugin get added, 
    //This should only be done when the rewrite rules are changing, Ie. When this plugin is activated(Or Deactivated), For simplicity while developing using WP Rewrite, I flush the rules on every page load
    
global $wp_rewrite;
    
$wp_rewrite->flush_rules();
}

?>