web-dev-qa-db-fra.com

Renvoie uniquement le sous-terme personnalisé pour le type de publication personnalisé, ne pas renvoyer terme-parent

J'ai créé une fonction personnalisée qui récupère le terme de taxonomie personnalisé pour une liste de publications dans une requête et qui renvoie le nom et le lien. De plus, cela exclut également de lister un terme si je spécifie le terme id (j'ai un terme spécial que je ne souhaite pas afficher qui est utilisé comme crochet de boucle).

Ceci est réalisé par cette fonction

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;
}

Je l'affiche ensuite avec cette ligne

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

Tout va bien.

Maintenant, je suis plus profondément dans l'arborescence de mon site et je voudrais récupérer le/les terme (s) du message actuel (s) une fois de plus, mais maintenant term/s et ne pas afficher le terme parent. J'ai essayé de modifier ce qui précède, mais je n'arrive pas à séparer les choses.

Les exemples que j'ai vus ailleurs ne traitent pas des termes personnalisés. De plus, j'aimerais en faire une fonction pour pouvoir définir certains paramètres comme ci-dessus.

Ceci est ma dernière tentative

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;
}
4
Ashkas

Voici plus d'un guide complet basé sur l'objet $wp_query:

La taxonomie

D'abord, vous voudrez peut-être savoir dans quelle taxonomie vous vous trouvez, son nom et récupérer toutes les données disponibles de l'objet.

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

Le taxon/terme

Ensuite, vous voudrez peut-être faire quelque chose avec le taxon/terme actuel.

// 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 );

Les ancêtres/parents

Obtenir les ancêtres/parents offre beaucoup de possibilités. Par exemple, pour un fil d'ariane navigation ou post méta données ou simplement pour les filtrer de la liste des taxonomies affichées.

// 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 )
}

Est-ce une taxonomie hiérarchique?

Vous devrez toujours faire la distinction entre les taxonomies hiérarchiques (comme la catégorie) et plates (comme les balises postales, comme).

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

Avons-nous des enfants, mon cher?

Parfois, vous êtes au milieu d'une taxonomie hiérarchique très profondément imbriquée. Ensuite, il est logique de gérer les enfants aussi.

// 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 );
}
2
kaiser