views:

36

answers:

1

How can I remove the author prefix on a WordPress website, I have done a quick Google but have only found htaccess redirects which I don't want to resort to.

To clarify I want to turn this:

http://www.domain.com/author/cameron/

into this

http://www.domain.com/cameron/

I don't want to use any redirects of any kind, but actual PHP code I can use in the functions.php file, as I want all links across the site that use the author stuff to auto update without keeping there original links and then redirecting to the new one.

Thanks

+1  A: 

You basically need to add WP rewrite rules to match the names of each of your users in the desired form. This is what the WP No Category Base does for categories, so most of the code in my answer is adapted from that plugin.

The primary part of the plugin is a function which hooks into the author_rewrite_rules filter and replaces the author rewrite rules. This retrieves all the user names and adds a rewrite rule specifically for each user (the below won't handle feeds, so look at the WP No Category Base source if you need that).

add_filter('author_rewrite_rules', 'no_author_base_rewrite_rules');
function no_author_base_rewrite_rules($author_rewrite) { 
    global $wpdb;
    $author_rewrite = array();
    $authors = $wpdb->get_results("SELECT user_nicename AS nicename from $wpdb->users");    
    foreach($authors as $author) {
        $author_rewrite["({$author->nicename})/page/?([0-9]+)/?$"] = 'index.php?author_name=$matches[1]&paged=$matches[2]';
        $author_rewrite["({$author->nicename})/?$"] = 'index.php?author_name=$matches[1]';
    }   
    return $author_rewrite;
}

The other key part of the plugin is a function which hooks into the author_link filter and removes the 'author' base from the returned URL.

add_filter('author_link', 'no_author_base', 1000, 2);
function no_author_base($link, $author_id) {
    $link_base = trailingslashit(get_option('home'));
    $link = preg_replace("|^{$link_base}author/|", '', $link);
    return $link_base . $link;
}

See this gist: http://gist.github.com/564465

This doesn't handle redirection from the old style author URLs, again, see the WP No Category Base source if you need to do that.

Richard M
Thanks a lot :)
Cameron