답변:
Bainternet의 답변을 기반으로 한이 코드에 대한 Ivaylo에게 감사드립니다.
아래의 첫 번째 함수 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 )
( documentation )을 사용할 수 있습니다 . 주어진 용어의 최상위 부모의 모든 자녀를 얻으려면 다음과 같이 위의 결과를 전달할 수 있습니다 get_term_children( get_term_top_most_parent( $term, $taxonomy ), $taxonomy )
.
3.1.0부터 get_ancestors()
사용 가능합니다. 계층 구조에서 상위에서 상위까지 상위 배열을 리턴합니다.
다음은 주어진 용어의 최상위 모항을 얻는 간단한 함수입니다.
function get_term_top_most_parent( $term_id, $taxonomy ) {
$parent = get_term_by( 'id', $term_id, $taxonomy );
while ( $parent->parent != 0 ){
$parent = get_term_by( 'id', $parent->parent, $taxonomy );
}
return $parent;
}
이 함수가 있으면 다음에서 반환 한 결과를 반복 할 수 있습니다 wp_get_object_terms
.
$terms = wp_get_object_terms( $post->ID, 'taxonomy' );
$top_parent_terms = array();
foreach ( $terms as $term ) {
//Get top level parent
$top_parent = get_term_top_most_parent( $term->ID, 'taxomony' );
//Check if you have it in your array to only add it once
if ( !in_array( $top_parent->ID, $top_parent_terms ) ) {
$top_parent_terms[] = $top_parent;
}
}
나는 같은 문제가 있었고 쉽게 해결했다. 이것 좀 봐:
정의하십시오 $taxonomy
. 데이터를 얻으려는 분류의 슬러그 일 수 있습니다. 이 작업을 수행 한 후 간단히 다음을 수행 할 수 있습니다.
<?php
$postterms = wp_get_post_terms($post->ID, $taxonomy); // get post terms
$parentId = $postterms[0]->parent; // get parent term ID
$parentObj = get_term_by('id', $parentId, $taxonomy); // get parent object
?>
이제 다음과 같은 것을 얻었습니다.
object(stdClass)#98 (11) {
["term_id"]=>
int(3)
["name"]=>
string(8) "Esportes"
["slug"]=>
string(8) "esportes"
["term_group"]=>
int(0)
["term_taxonomy_id"]=>
int(3)
["taxonomy"]=>
string(17) "noticiaseditorias"
["description"]=>
string(0) ""
["parent"]=>
int(0)
["count"]=>
int(4)
["object_id"]=>
int(123)
["filter"]=>
string(3) "raw"
}
그리고 당신은 $parentObj
슬러그, 이름, 아이디 등을 얻을 수 있습니다 . 그냥 사용하여 $parentObj->slug
또는 $parentObj->name
exemple있다.
가장 쉬운 방법:
$rootId = end( get_ancestors( $term_id, 'my_taxonomy' ) );
$root = get_term( $rootId, 'my_taxonomy' );
echo $root->name;
아마도 이것이 도움이 될 것입니다 : get_ancestors( $object_id, $object_type );