Есть запись входящая в несколько терминов.
Получаю все термины функцией get_the_terms( get_the_ID(), 'taxonomy' );
В ответ приходит такой массив:
Array
(
[0] => WP_Term Object
(
[term_id] => 24
[name] => Подкатегория
[slug] => sub_term
[term_group] => 0
[term_taxonomy_id] => 24
[taxonomy] => catalogs
[description] => Подкатегория
[parent] => 19
[count] => 5
[filter] => raw
)
[1] => WP_Term Object
(
[term_id] => 19
[name] => Тест категория2
[slug] => test_in_term2
[term_group] => 0
[term_taxonomy_id] => 19
[taxonomy] => catalogs
[description] => Тест категория2
[parent] => 108
[count] => 5
[filter] => raw
)
[2] => WP_Term Object
(
[term_id] => 13
[name] => Тестовая
[slug] => test_term
[term_group] => 0
[term_taxonomy_id] => 13
[taxonomy] => catalogs
[description] => Тестовая категория
[parent] => 0
[count] => 5
[filter] => raw
)
[3] => WP_Term Object
(
[term_id] => 108
[name] => УберТест
[slug] => ubertest
[term_group] => 0
[term_taxonomy_id] => 109
[taxonomy] => catalogs
[description] => УберТест
[parent] => 13
[count] => 5
[filter] => raw
)
)
Суть в том, что бы отсортировать массив так, что бы объекты терминов в нем шли в порядке их вложенности друг в друга, т.е. к примеру объект с term_id=108 должен быть между term_id=13 и term_id=19, т.к. 13 родитель 108, а 108 родитель 19.
В принципе проблема в том что бы получить ближайший термин в который вложена запись. а от него можно вверх все построить.