<?php
/*
Plugin Name: Category Slug Hierarchy
Plugin URI: http://smallvoid.com
Description: Fixes slugs for taxonomy with hierarchy (Ex. category)
Author: Rolf Kristensen
Version: 1.0
Author URI: http://smallvoid.com
*/

function fix_category_slug_hierarchy($q) {
	global $wp_rewrite;
	if ($wp_rewrite->using_permalinks() && $q->is_category)
	{
		foreach($q->query as $query)
		{
			$slugs = explode('/', $query);
			if (count($slugs) > 1)
			{
				$taxonomy = 'category';
				$term;
				foreach($slugs as $term_slug)
				{
					if (isset($term))
					{
						$terms = get_terms($taxonomy, array('parent' => $term->term_id, 'slug' => $term_slug));
						$term = null;
						if (count($terms)==1)
							$term = $terms[0];
						else
							break;
					}
					else
					{
						$term = get_term_by('slug', $term_slug, $taxonomy);
					}
				}
		
				if (isset($term))
				{
					$tax_query = array(
				            array(
					        'taxonomy' => $taxonomy,
					        'terms' => $term->term_id,
					        'field' => 'term_id',
				            )
				        );
				        $tax_query = new WP_Tax_Query($tax_query);
					$q->tax_query = $tax_query;
				}
			}
		}
	}
}

if ( function_exists( 'add_filter' ) )
{
    add_action('parse_tax_query', 'fix_category_slug_hierarchy');
}
?>