Получите термины второго уровня пользовательской таксономии
Я хочу получить термины второго уровня определенного родительского (первого уровня) термина в пользовательской таксономии. Звучит сложно, но было бы полезно.
Term 1
SubTerm-1.1
SubTerm-1.2
SubTerm-1.2.1
Term 2
SubTerm-2.1
Скажем, если SubTerm->parent
является идентификатором термина 1, то я хочу вывести подтермы 1.1 и 1.2, но не 1.2.1.
wp_list_categories(array('depth' => 2, 'taxonomy' => 'customtax'));
это не то, что я ищу, так как в нем перечислены термины с их ссылками, чего я не хочу, и нет опции фильтрации по идентификатору SubTerm->parent
.
Итак, есть идеи?
2 answers
Вы можете использовать PHP array_filter
для обработки результатов функции запроса таксономии, которая возвращает свои результаты, а затем отображает их. Что-то вроде:
# This returns the whole taxonomy...
$whole_tax = get_terms('customtax', array('hide_empty' => 0));
$second_level = array_filter($whole_tax, function ($t) {
# This term has a parent, but its parent does not.
return $t->parent != 0 && get_term($t->parent, 'customtax')->parent == 0;
});
На этом этапе вы можете отобразить $second_level
для вывода в любом формате, который вы хотите.
ПРИМЕЧАНИЕ. Если это часто используется на занятой стороне, следует избегать всех этих дополнительных вызовов get_term
, считывая данные из массива $whole_tax
, предполагая, что в документации указано, что get_term
всегда попадает в базу данных при передаче идентификатора.
$tax ='taxonomy';
$args = array(
'taxonomy' => $tax,
'hide_empty' => false,
'parent' => 0,
);
$toplv_term_query = new WP_Term_Query($args);
foreach($toplv_term_query->get_terms() as $toplv_term){
$args = array(
'taxonomy' => $tax,
'hide_empty' => false,
'parent' => $toplv_term->term_id,
);
$secondlv_term_query = new WP_Term_Query($args);
foreach($secondlv_term_query->get_terms() as $secondlv_term){
$secondlv_term->term_id;
}
}