| 1 | <?php |
|---|
| 2 | |
|---|
| 3 | add_action('init', '_state_taxonomy'); |
|---|
| 4 | function _state_taxonomy() { |
|---|
| 5 | global $wp_rewrite; |
|---|
| 6 | register_taxonomy('state', array('note', 'post'), array('hierarchical' => true, 'label' => 'States', 'show_ui' => true, 'query_var' => 'state', 'rewrite' => true) ); |
|---|
| 7 | $wp_rewrite->add_rewrite_tag("%state%", '.*?/?([^/]+)', "state="); // Override the query var, do this directly after registering the taxonomy |
|---|
| 8 | // Note on the regex above, May look strange, but is to only match the final path item in the url, which is the child slug. WP_Query doesnt reconise hierarchical custom tax slugs |
|---|
| 9 | // $wp_rewrite->flush_rules(); // Flush them on activation, not init, please? |
|---|
| 10 | } |
|---|
| 11 | |
|---|
| 12 | add_filter('term_link', '_hierarchical_terms_hierarchical_links', 9, 3); |
|---|
| 13 | function _hierarchical_terms_hierarchical_links($termlink, $term, $taxonomy) { |
|---|
| 14 | global $wp_rewrite; |
|---|
| 15 | |
|---|
| 16 | if ( 'state' != $taxonomy ) // Change 'state' to your required taxonomy |
|---|
| 17 | return $termlink; |
|---|
| 18 | |
|---|
| 19 | $termstruct = $wp_rewrite->get_extra_permastruct($taxonomy); |
|---|
| 20 | if ( empty($termstruct) ) // If rewrites are disabled, fall back to the current link |
|---|
| 21 | return $termlink; |
|---|
| 22 | |
|---|
| 23 | if ( empty($term->parent) ) // Fall back to the current link for parent terms |
|---|
| 24 | return $termlink; |
|---|
| 25 | |
|---|
| 26 | $nicename = $term->slug; |
|---|
| 27 | while ( !empty($term->parent) ) { |
|---|
| 28 | $term = get_term($term->parent, $taxonomy); |
|---|
| 29 | $nicename = $term->slug . '/' . $nicename; |
|---|
| 30 | } |
|---|
| 31 | |
|---|
| 32 | $termlink = str_replace("%$taxonomy%", $nicename, $termstruct); |
|---|
| 33 | $termlink = home_url( user_trailingslashit($termlink, 'category') ); |
|---|
| 34 | |
|---|
| 35 | return $termlink; |
|---|
| 36 | } |
|---|
| 37 | |
|---|