Retorna apenas o sub-termo customizado para o tipo de postagem customizado, não faz eco do termo pai

4

Eu criei uma função personalizada que recupera o termo de taxonomia personalizada para uma lista de postagens em uma consulta e exibe o nome e o link. Além disso, também exclui a listagem de um termo se eu especificar o termo id (tenho um termo especial, que não quero exibir, que uso como um loop hook).

Isto é conseguido por esta função

function my_get_the_term_list( $id = 0, $taxonomy, $before = '', $sep = '', $after = '', $exclude = array() ) {
$terms = get_the_terms( $id, $taxonomy );

if ( is_wp_error( $terms ) )
    return $terms;

if ( empty( $terms ) )
    return false;

foreach ( $terms as $term ) {

    if(!in_array($term->term_id,$exclude)) {
        $link = get_term_link( $term, $taxonomy );
        if ( is_wp_error( $link ) )
            return $link;
        $term_links[] = '<a href="' . $link . '" rel="tag" class="category-link" title="See all stories from '.$terms_as_text.'">' . $term->name . '</a>';
    }
}

$term_links = apply_filters( "term_links-$taxonomy", $term_links );

return $before . join( $sep, $term_links ) . $after;
}

Eu então exibi-lo com esta linha

<?php echo my_get_the_term_list( $post->ID, 'sports_category',  '', ' ', '', array(3623) ); ?>

Tudo bem e bom.

Agora estou mais interessado em minha árvore de sites e gostaria de recuperar o termo / s da postagem atual mais uma vez, mas agora (como estou na página de arquivo do termo na explicação acima), só quero recuperar sub-termo (s) e não exibir o termo pai. Eu tentei modificar o acima, mas não consigo separar as coisas.

Os exemplos que vi em outros lugares não lidam com termos personalizados, além disso, gostaria de formá-los em função para que eu possa definir alguns parâmetros como acima.

Esta é minha última tentativa

function my_get_the_children( $id, $taxonomy, $before = '', $sep = '', $after = '', $exclude = array() ) {
$terms = get_term_children( $id, $taxonomy );

if ( is_wp_error( $terms ) )
    return $terms;

if ( empty( $terms ) )
    return false;

foreach ( $terms as $term ) {

    if(!in_array($term->term_id,$exclude)) {
        $link = get_term_link( $term->name, $taxonomy );
        if ( is_wp_error( $link ) )
            return $link;
        $term_links[] = '<a href="' . $link . '" rel="tag" class="category-link" title="See all stories from '.$terms_as_text.'">' . $term->name . '</a>';
    }
}

$term_links = apply_filters( "term_links-$taxonomy", $term_links );

return $before . join( $sep, $term_links ) . $after;
}
    
por Ashkas 09.10.2012 / 11:01

1 resposta

2

Veja mais um guia completo com base no objeto $wp_query :

A taxonomia

Primeiro, convém saber em qual taxonomia você está, qual é o nome dele e recuperar todos os dados disponíveis do objeto.

// Taxonomy name
$taxonomy  = get_query_var( 'taxonomy' );
// Taxonomy object
get_taxonomy( $taxonomy );
// Taxonomy name
get_taxonomy( $taxonomy )->label;

O táxon / termo

Então você pode querer fazer algo com o taxon / termo atual.

// The current taxon/term slug
$term_slug = get_query_var( 'term' );
// The complete current taxon/term object
$term      = get_term_by( 'slug', $term_slug, $taxonomy );

Os antepassados / pais

Obter os antepassados / pais oferece muitas possibilidades. Por exemplo, para uma navegação de trilha de navegação ou postar metadados ou simplesmente filtrá-los para fora da lista de taxonomias mostradas.

// Ancestors/Parents
$ancestors = get_ancestors( 
     $term->term_id
    ,$taxonomy
);
foreach ( $ancestors as $ancestor )
{
    // The currently looped parents/ancestors object
    $ancestor_obj = get_term( $ancestor, $taxonomy );
    // The currently looped parents/ancestors name
    $ancestor_name = $ancestor_obj->name;

    // Link to the parent/ancestor taxon/term archive
    $ancestor_link = get_term_link( $ancestor, $taxonomy )
}

É uma taxonomia hierárquica?

Você sempre terá que distinguir entre taxonomias hierárquicas (como categoria) e simples (postar tags como).

// Are we in a hierarchical taxonomy?
if ( is_taxonomy_hierarchical( $taxonomy ) )
{
    // Do stuff
}

Temos filhos, minha querida?

Às vezes você está no meio de uma taxonomia hierárquica realmente profundamente aninhada. Então faz sentido lidar com as crianças também.

// Based on the above retrieved data
$children = get_term_children(
     $term->term_id
    ,$taxonomy
);
foreach ( $children as $child )
{
    // The currently looped child object
    $child_obj = get_term( $child, $taxonomy );
    // The currently looped child name
    $child_name = $child_obj->name;

    // Link to the child taxon/term archive
    $child_link = get_term_link( $child, $taxonomy );
}
    
por kaiser 09.10.2012 / 13:52