Спасибо Ивайло за этот код, основанный на ответе Bainternet.
Первая функция, приведенная ниже, get_term_top_most_parent
принимает термин и таксономию и возвращает родителя верхнего уровня (или сам термин, если он не имеет родителей); вторая функция ( get_top_parents
) работает в цикле и, учитывая таксономию, возвращает HTML-список родительских элементов терминов сообщения.
// Determine the top-most parent of a term
function get_term_top_most_parent( $term, $taxonomy ) {
// Start from the current term
$parent = get_term( $term, $taxonomy );
// Climb up the hierarchy until we reach a term with parent = '0'
while ( $parent->parent != '0' ) {
$term_id = $parent->parent;
$parent = get_term( $term_id, $taxonomy);
}
return $parent;
}
Если у вас есть функция выше, вы можете перебрать результаты, возвращаемые wp_get_object_terms
и показать верхний родитель каждого термина:
function get_top_parents( $taxonomy ) {
// get terms for current post
$terms = wp_get_object_terms( get_the_ID(), $taxonomy );
$top_parent_terms = array();
foreach ( $terms as $term ) {
//get top level parent
$top_parent = get_term_top_most_parent( $term, $taxonomy );
//check if you have it in your array to only add it once
if ( !in_array( $top_parent, $top_parent_terms ) ) {
$top_parent_terms[] = $top_parent;
}
}
// build output (the HTML is up to you)
$output = '<ul>';
foreach ( $top_parent_terms as $term ) {
//Add every term
$output .= '<li><a href="'. get_term_link( $term ) . '">' . $term->name . '</a></li>';
}
$output .= '</ul>';
return $output;
}
get_term_children( $term, $taxonomy )
( документация ). Если вы хотите , чтобы все дети родителя данного термина топ-уровня, вы могли бы пройти предыдущий результат в него, как это:get_term_children( get_term_top_most_parent( $term, $taxonomy ), $taxonomy )
.get_ancestors
функцию WP , которая была новой и плохо документированной, когда был написан ответ. Я опубликую новый ответ, когда у меня будет время для тестирования.Начиная с 3.1.0,
get_ancestors()
доступно. Возвращает массив предков от низшего к высшему в иерархии.источник
Вот простая функция, которая даст вам самый верхний родительский термин для любого данного термина:
Если у вас есть эта функция, вы можете просто просмотреть результаты, возвращаемые
wp_get_object_terms
:источник
источник
У меня была такая же проблема, и я решил ее легко. Проверь это:
Определение
$taxonomy
. Это может быть та часть таксономии, для которой вы хотите получить данные. После этого вы можете просто сделать это:Теперь у вас есть что-то вроде этого:
И вы можете использовать,
$parentObj
чтобы получить слаг, имя, идентификатор, что угодно. Просто используя$parentObj->slug
или$parentObj->name
как пример.источник
Самый простой способ:
источник
Может быть, это поможет:
get_ancestors( $object_id, $object_type );
codex.wordpress.org
источник