WordPress.org

Make WordPress Core

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

File category-slug-hierarchy_v11.php.txt, 1.6 KB (added by snakefoot, 19 months 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?>