Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save felipeands/5f997389bc861a62d07e to your computer and use it in GitHub Desktop.
Save felipeands/5f997389bc861a62d07e to your computer and use it in GitHub Desktop.
<?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();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment