Cảm ơn Ivaylo về mã này, dựa trên câu trả lời của BaiNET.
Hàm đầu tiên bên dưới, get_term_top_most_parent
chấp nhận một thuật ngữ và phân loại và trả về cha mẹ cấp cao nhất của thuật ngữ (hoặc chính thuật ngữ đó, nếu nó không có cha mẹ); hàm thứ hai ( get_top_parents
) hoạt động trong vòng lặp và, được đưa ra một nguyên tắc phân loại, trả về một danh sách HTML của các bậc cha mẹ cấp cao nhất của các điều khoản của bài đăng.
// 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;
}
Khi bạn có chức năng trên, bạn có thể lặp lại các kết quả được trả về wp_get_object_terms
và hiển thị cha mẹ hàng đầu của mỗi thuật ngữ:
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;
}