web-dev-qa-db-fra.com

Comment gérer "the_terms" dans la boucle

J'ai cherché google mais je suis vraiment confus. J'essaie d'afficher les termes de la taxonomie attribuée au poste. J'utilise the_terms($post->ID, 'locations');. La taxonomie personnalisée est hiérarchique.

Exemple: 3 termes affectés à poster: USA(parent) > FL(direct child of "USA") > Miami(direct child of "FL"). Ce que je reçois: FL, Miami, USA qui signifie que les termes sont affichés par ordre alphabétique. Je veux qu'ils soient affichés comme: Miami, FL, USA. Cela peut-il être réalisé? Je voudrais aussi supprimer les ancres des termes et strip_tags(the_terms($post->ID, 'locations')) ne semble pas fonctionner.

Lors de la recherche sur Google, certaines personnes utilisent get_terms()_ un autre get_the_terms et d’autres the_terms, c’est ce que j’utilise et qui semble fonctionner - affiche les termes. Quelle est la différence entre ces fonctions? Est-ce que j'utilise le bon?

1
Arg Geo

Pour répondre à votre première question

Quelle est la différence entre ces fonctions

  • get_terms() retourne un tableau d'objets termes appartenant à une taxonomie spécifique

  • get_the_terms() retourne un tableau de termes appartenant à un post

  • the_terms() affiche une chaîne de mise en forme HTML des noms de termes appartenant à un message

Parce que vous avez besoin que vos termes ne soient pas liés par un lien hypertexte et ordonnés en fonction du parent, je crois que wp_get_object_terms() sera une meilleure option ici. wp_get_object_terms() renvoie également un tableau de termes appartenant à une publication, mais est plus flexible. Vous payez pour cette flexibilité, cependant, car vous effectuez un appel supplémentaire de base de données par publication.

Ceci dit, vous pouvez essayer les solutions suivantes: ( Tout le code n’a pas été testé )

$args = [
    'orderby' => 'parent', 
    'order'   => 'DESC' 
];
$terms  = wp_get_object_terms( $post->ID, 'locations', $args );
$names  = wp_list_pluck( $terms, 'name' );
$output = implode( ', ', $names );
echo $output;
3
Pieter Goosen