Agradecemos a Ivaylo por esse código, que foi baseado na resposta de Bainternet.
A primeira função abaixo, get_term_top_most_parent
aceita um termo e taxonomia e retorna o pai de nível superior do termo (ou o próprio termo, se não tiver pais); a segunda função ( get_top_parents
) funciona no loop e, dada uma taxonomia, retorna uma lista HTML dos pais de nível superior dos termos de uma postagem.
// 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;
}
Depois de ter a função acima, você pode percorrer os resultados retornados por wp_get_object_terms
e exibir o principal pai de cada termo:
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 )
( documentação ). Se você queria para obter todos os filhos de pai de nível superior de um determinado prazo, você poderia passar o resultado acima para ele, como este:get_term_children( get_term_top_most_parent( $term, $taxonomy ), $taxonomy )
.get_ancestors
, que era nova e não estava bem documentada quando a resposta foi escrita. Vou postar uma nova resposta quando tiver tempo para testar.Desde 3.1.0,
get_ancestors()
está disponível. Retorna uma matriz de ancestrais da menor para a maior na hierarquia.fonte
Aqui está uma função simples que fornecerá o termo principal principal de qualquer termo:
Depois de ter essa função, basta percorrer os resultados retornados por
wp_get_object_terms
:fonte
fonte
Eu tive o mesmo problema e resolvi facilmente. Veja isso:
Definir
$taxonomy
. Pode ser a lesma da taxonomia que você deseja obter os dados. Depois de fazer isso, você pode simplesmente fazer o seguinte:Agora você tem algo parecido com isto:
E você pode usar
$parentObj
para obter lesma, nome, identificação, qualquer que seja. Apenas usando$parentObj->slug
ou$parentObj->name
como exemplo.fonte
Caminho mais fácil:
fonte
Talvez isso ajude:
get_ancestors( $object_id, $object_type );
codex.wordpress.org
fonte