Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

Enabled Root-based Category URLs in WordPress (Any bugs? Post comments below.)

View root-based-category-urls.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
<?php
/*
* 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: http://about.me/mikeschinkel
* Plugin URI: https://gist.github.com/1421235
* 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 );
exit;
}
$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;
}
}
Rootbased_Category_URLs::on_load();

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

Owner

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

Screenshot showing Category Base option

Owner

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

Ciantic commented

@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.

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.