here you go:
add_action('init', 'wp_new_flush_rewrite_rules'); //Run this action only ONCE if not you are looking at 2 extra db queries on every page load so dont forget to comment it out
function wp_new_flush_rewrite_rules() {
global $wp_rewrite;
$wp_rewrite->flush_rules();
}
add_action('generate_rewrite_rules', 'new_rewrite_rules');
function new_rewrite_rules( $wp_rewrite ) {
$post_type="post";
$new_rules = array(
'writer/(.+?)/page/?([0-9]{1,})/?$' => 'index.php?post_type=".$post_type."&meta_key=writer&meta_value=".$wp_rewrite->preg_index(1)."&paged='.$wp_rewrite->preg_index(2),
'writer/(.+?)/?$' => 'index.php?post_type=".$post_type."&meta_key=writer&meta_value=".$wp_rewrite->preg_index(1),
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
return $wp_rewrite;
}
add_filter("query_vars', 'add_query_vars');
function add_query_vars( $vars ){
$vars[] = 'meta_key';
$vars[] = 'meta_value';
return $vars;
}
add_action('template_redirect', 'template_redirect_intercept');
function template_redirect_intercept(){
global $wp_query;
if ( $wp_query->get('writer') && file_exists( TEMPLATEPATH . '/author.php' ) ){
$wp_query->is_404 = ''; $wp_query->is_archive = 1; $wp_query->is_post_type_archive = 1; // This is to prevent 404 errors on page 2,3,4 if posts for that page dont exist.
include( TEMPLATEPATH . '/author.php' );
exit;
}
}
it is written to search for the ‘writer’ meta value of a post and display the author.php template.
the url will look like mysite.com/writer/WRITERNAME/
pagination also works so mysite.com/writer/WRITERNAME/page/2/ will work without an issue.