Skip to content
Create a gist now

Instantly share code, notes, and snippets.

Embed URL


Subversion checkout URL

You can clone with
Download ZIP
Enabled Root-based Category URLs in WordPress (Any bugs? Post comments below.)
* Plugin Name: Root-based Category URLs
* Description: Enables root-based Category URLs, i.e. Makes /category/my-category/ URLs route as /my-category/
* Author: Mike Schinkel
* Author URI:
* Plugin URI:
* Version: 0.1.1
* License: GPL 2+
class Rootbased_Category_URLs {
static function on_load() {
add_filter( 'request', array( __CLASS__, 'request' ) );
add_filter( 'category_link', array( __CLASS__, 'category_link' ) );
function request( $query_vars ) {
global $wp;
if ( preg_match( self::get_category_base() . '(.*)', $wp->request, $match ) ) {
wp_safe_redirect( self::category_link( $wp->request ), 301 );
$category_hash = array_flip( self::get_category_slugs() );
if ( isset( $category_hash[$wp->request] ) ) {
$query_vars = array( 'category_name' => $wp->request );
return $query_vars;
function get_category_base() {
$category_base = get_option('category_base');
if ( empty( $category_base ) )
$category_base = 'category';
return "/{$category_base}/";
function category_link( $category_link ) {
return str_replace( self::get_category_base(), '/', $category_link );
function get_category_slugs() {
$categories = get_categories();
foreach( $categories as $index => $category ) {
$categories[$index] = $category->slug;
return $categories;

Great stuff, hope it's public domain. Going to create more generalized version for custom taxonomy with add_filter('term_link', ...), get_terms()


I just added "License: GPL 2+".

If you update it and want to share back with me I'll review it and update this?


Mike, when I used your code I get this error.

Warning: preg_match() [function.preg-match]: Unknown modifier '(' in ... \wp-content\plugins\RemoveCategory\RemoveCategory.php on line 19


@AverageJoe: What do you have your category base set to?

Screenshot showing Category Base option


@AverageJoe: Alternately, do you have any other plugins that modify your URLs?


@AverageJoe: Try setting rewriting on. By clicking on that image "Month and name" for example. Basically the "default" does not allow anykind of rewriting, you must set anything else than that.


to avoid warnings such as:

preg_match(): Unknown modifier '(' 

change line 19 (add regexp delimiters, to avoid parsing "/" from get_category slugs as delimiters), to:

if ( preg_match( '#' . self::get_category_base() . '(.*)#', $wp->request, $match ) ) {
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.