SHOW:
|
|
- or go back to the newest paste.
1 | function custom_taxonomies_terms_links() | |
2 | { | |
3 | // get post by post id | |
4 | $post = get_post( $post->ID ); | |
5 | ||
6 | // get post type by post | |
7 | $post_type = $post->post_type; | |
8 | ||
9 | // get post type taxonomies | |
10 | $taxonomies = get_object_taxonomies( $post_type, 'objects' ); | |
11 | ||
12 | $out = ''; | |
13 | ||
14 | $format_start_list = "<h2>%s</h2><ul>\n"; | |
15 | $format_start_parent = "<li><h3>%s</h3><ul>\n"; | |
16 | $format_item = "<li><a href=\"%s\">%s</a></li>\n"; | |
17 | $format_end_parent = "</ul></li>\n"; | |
18 | $format_end_list = "</ul>\n"; | |
19 | ||
20 | foreach ( $taxonomies as $taxonomy_slug => $taxonomy ) { | |
21 | $ordered_terms = array(); | |
22 | $parent_terms = array(); | |
23 | $parents = 0; | |
24 | ||
25 | // get the terms related to post | |
26 | $terms = get_the_terms( $post->ID, $taxonomy_slug ); | |
27 | ||
28 | usort($terms, 'order_cats'); | |
29 | ||
30 | - | $ordered_terms[$term->term_id]['parent'] = $term; |
30 | + | |
31 | $out .= sprintf($format_start_list, $taxonomy->label); | |
32 | - | $ordered_terms[$term->parent]['items'][$term->term_id] = $term; |
32 | + | |
33 | foreach ( $terms as $term ) { | |
34 | if ( $term->parent < 1 ) { | |
35 | $parent_terms[$parents]['id'] = $term->term_id; | |
36 | - | foreach ($ordered_terms as $id => $terms) { |
36 | + | $parent_terms[$parents++]['parent'] = $term; |
37 | } else { | |
38 | $ordered_terms[$term->parent][$term->term_id] = $term; | |
39 | - | foreach ($terms['items'] as $term) { |
39 | + | |
40 | } | |
41 | ||
42 | foreach ($parent_terms as $id => $terms) { | |
43 | $out .= sprintf($format_start_parent, $terms['parent']->name); | |
44 | ||
45 | foreach ($ordered_terms[$terms['id']] as $id2 => $term) { | |
46 | $out .= sprintf($format_item, get_term_link($term->slug, $taxonomy_slug), $term->name); | |
47 | } | |
48 | ||
49 | $out .= $format_end_parent; | |
50 | } | |
51 | ||
52 | ||
53 | $out .= $format_end_list; | |
54 | } | |
55 | } | |
56 | ||
57 | return $out; | |
58 | } | |
59 | ||
60 | function order_cats($a, $b) | |
61 | { | |
62 | if ($a->term_order == $b->term_order) { | |
63 | return 0; | |
64 | } | |
65 | ||
66 | return $a->term_order < $b->term_order ? -1 : 1; | |
67 | } |