web-dev-qa-db-fra.com

Comment sortir le chemin de taxonomie hiérarchique, avec seulement le terme le plus profond attribué?

Disons que nous avons une taxonomie à trois niveaux, par exemple. A > B > C.

Ensuite, nous créons un article et l’attribuons au terme "C".
Dans notre cas, il n’y aura jamais qu’une seule mission; c'est l'événement où une chose a eu lieu à.

Sur la page du message, je ne souhaite pas afficher le terme attribué, mais le chemin hiérarchique . Ainsi, même si le message n’est attribué qu’à "C", je souhaite afficher "A> B> C" avec des liens vers la page d’archive de chacun de ces termes.

get_the_term_list ne le fera pas, et à moins que j'utilise des termes de recherche très mauvais depuis une semaine entière, c'est apparemment très difficile à faire et chaque solution supposée que j'ai réussi à trouver est cassée d'une manière ou d'une autre. (Une des hypothèses sérieusement requises sur l'ordre des valeurs d'identifiant de base de données des termes de taxonomie.)
Voici un exemple qui semblait répondre à mon cas exact. Cela… génère simplement rien dans mon installation, et var_dump($links_string) produit quelque chose comme "string(0) "";" (notez qu'il y a deux endroits où "---" apparaît et qui devraient être réduits à un seul tiret.)

Est-ce que je manque quelque chose?

Notez les choses que je ne veux pas :

  • Assigner manuellement chaque terme dans la hiérarchie. Ce n'est clairement pas nécessaire. Si vous visitez la page d'archive pour "A" dans la structure de l'exemple, WordPress répertorie les publications de chaque sous-terme, alors il est évident qu'il dispose d'un moyen de voir la hiérarchie.
    • Si vous avez déjà eu des clients, vous savez que cela ne sera tout simplement pas fait.
  • Chapelure. Celles-ci commencent toutes par la liste de la racine du site et se terminent par le titre du message. Elles sont extrêmement difficiles à nettoyer. L'implémentation de Yoast SEO, par exemple, peut être amenée à supprimer la racine avec des données vierges et le titre de l'article avec un filtre externe, mais il est impossible de ne pas se retrouver avec un séparateur d'élément final.
    • En outre, chaque implémentation du fil d'Ariane que j'ai trouvée pour une raison quelconque se limite à fournir une fonction unique qui affiche un seul chemin de taxonomie configuré (vers la publication). J'ai beaucoup de taxonomies, et il se peut que je devrais éventuellement en lister d'autres de la même manière. J'ai donc besoin d'une fonction générique qui me permet de dire quelle taxonomie utiliser.
1
Su'

Utilisez get_the_terms pour rechercher le terme de l'article, puis utilisez get_ancestors pour obtenir un tableau des ID parents de ce terme.

$tax = 'category';
$terms = get_the_terms( get_the_ID(), $tax );
if( $terms && ! is_wp_error( $terms ) ){
    // check for and output any ancestors
    $ancestors = array_reverse(get_ancestors( $terms[0]->term_id, $tax ));
    if( $ancestors ){
        foreach( $ancestors as $ancestor ){
            $parent = get_term( $ancestor, $tax );
            if( $parent && ! is_wp_error( $parent ) ){
                echo $parent->name;
                echo get_term_link( $parent );
            }
        }
    }
    // output directly assigned term
    echo $terms[0]->name;
    echo get_term_link( $terms[0] );
}
2
Milo