Make WordPress Core

Ticket #5034: category-slug-hierarchy_v11.php.txt

File category-slug-hierarchy_v11.php.txt, 1.6 KB (added by snakefoot, 8 years ago)
Line 
1<?php
2/*
3Plugin Name: Category Slug Hierarchy
4Plugin URI: http://smallvoid.com
5Description: Fixes slugs for taxonomy with hierarchy (Ex. category)
6Author: Rolf Kristensen
7Version: 1.1
8Author URI: http://smallvoid.com
9*/
10
11function fix_category_slug_hierarchy($q) {
12 global $wp_rewrite;
13 if (!is_admin() && $wp_rewrite->using_permalinks() && $q->is_main_query() && $q->is_category)
14 {
15 foreach($q->query as $query)
16 {
17 $slugs = explode('/', $query);
18 if (count($slugs) > 1)
19 {
20 $category_path = rawurlencode( urldecode( $query ) );
21 $category_path = str_replace( '%2F', '/', $category_path );
22 $category_path = str_replace( '%20', ' ', $category_path );
23 $slugs = '/' . trim( $category_path, '/' );
24 $slugs = explode( '/', $slugs );
25
26 $taxonomy = 'category';
27 $term;
28 foreach($slugs as $term_slug)
29 {
30 if (isset($term))
31 {
32 $terms = get_terms($taxonomy, array('parent' => $term->term_id, 'slug' => $term_slug));
33 $term = null;
34 if (count($terms)==1)
35 $term = $terms[0];
36 else
37 break;
38 }
39 else
40 {
41 $term = get_term_by('slug', $term_slug, $taxonomy);
42 }
43 }
44
45 if (isset($term))
46 {
47 $tax_query = array(
48 array(
49 'taxonomy' => $taxonomy,
50 'terms' => $term->term_id,
51 'field' => 'term_id',
52 )
53 );
54 $tax_query = new WP_Tax_Query($tax_query);
55 $q->tax_query = $tax_query;
56 }
57 }
58 }
59 }
60}
61
62if ( function_exists( 'add_action' ) )
63{
64 add_action('parse_tax_query', 'fix_category_slug_hierarchy');
65}
66?>