Правильное дерево терминов
Возникает проблема при выводе таксономий записи в древовидном порядке. Дело в том, что функции:
$cur_terms = wp_get_post_terms( $post->ID, 'Systematic', array('orderby'=>'parent'));
или
$cur_terms = get_the_terms( $post->ID, 'Systematic'); $cur_terms = wp_list_sort( $cur_terms, 'parent' );
Возвращают массив отсортированный по значению поля parent. Но у меня id указанные в данном поле создавались не по порядку, соответственно список приходитт не от родителя к ребенку.
Пример результата вызова:
Array ( [0] => WP_Term Object ( [term_id] => 1054 [name] => Отдел: Ascomycota (Аскомицеты) [slug] => ascomycota [term_group] => 0 [term_taxonomy_id] => 1070 [taxonomy] => Systematic [description] => [parent] => 0 [count] => 31 [filter] => raw ) [1] => WP_Term Object ( [term_id] => 1199 [name] => Подотдел: Pezizomycotina (Пезизомикотины) [slug] => pezizomycotina [term_group] => 0 [term_taxonomy_id] => 1215 [taxonomy] => Systematic [description] => [parent] => 1054 [count] => 19 [filter] => raw ) [2] => WP_Term Object ( [term_id] => 1268 [name] => Подкласс: Pezizomycetidae (Пецицомицеты) [slug] => pezizomycetidae [term_group] => 0 [term_taxonomy_id] => 1284 [taxonomy] => Systematic [description] => [parent] => 1055 [count] => 11 [filter] => raw ) [3] => WP_Term Object ( [term_id] => 1057 [name] => Семейство: Discinaceae (Дисциновые) [slug] => discinaceae [term_group] => 0 [term_taxonomy_id] => 1073 [taxonomy] => Systematic [description] => [parent] => 1056 [count] => 3 [filter] => raw ) [4] => WP_Term Object ( [term_id] => 1058 [name] => Род: Gyromitra (Строчок) [slug] => gyromitra [term_group] => 0 [term_taxonomy_id] => 1074 [taxonomy] => Systematic [description] => [parent] => 1057 [count] => 3 [filter] => raw ) [5] => WP_Term Object ( [term_id] => 1055 [name] => Класс: Pezizomycetes (Пецицомицеты) [slug] => pezizomycetes [term_group] => 0 [term_taxonomy_id] => 1071 [taxonomy] => Systematic [description] => [parent] => 1199 [count] => 24 [filter] => raw ) [6] => WP_Term Object ( [term_id] => 1056 [name] => Порядок: Pezizales (Пецицевые) [slug] => pezizales [term_group] => 0 [term_taxonomy_id] => 1072 [taxonomy] => Systematic [description] => [parent] => 1268 [count] => 24 [filter] => raw ) );
Как отсортировать результат, чтобы он шел в правильном порядке?
На ум пришла рекурсия
Спасибо, работает, но на некоторых страницах, выдает ошибку:
Fatal error: Maximum function nesting level of '100' reached, aborting!
Как это исправить?
А что, у вас есть более ста вложенных друг в друга терминов? Если ошибка возникает на страницах, где не нужна эта рекурсивная сортировка - необходимо добавить условие и выполнять сортировку только там, где необходимо.