web-dev-qa-db-fra.com

Obtenir la taxonomie dans WP_Query Loop

J'ai écrit mon WP_Query personnalisé et utiliser la boucle pour afficher le contenu du message. J'utilise get_the_category() pour afficher les catégories de publication actuelle et cela fonctionne bien. Maintenant, pour certains types de publication, il existe des taxonomies personnalisées au lieu de catégories.

Code pour obtenir les catégories :

$categories = get_the_category();
   if(!empty($categories)){
      foreach($categories as $index => $cat){
         echo $cat->name;
      }
   }

Maintenant, je dois extraire toutes les taxonomies et les imprimer au format séparé par des virgules.

J'ai essayé ceci:

$taxonomies = get_the_taxonomies();
if(!empty($taxonomies)){
   foreach($taxonomies as $taxonomy){
         echo $taxonomy;
   }
}

Cela fonctionne et montre dans ce format "Étiquette de taxonomie: Terme (hyperlien)". Si les termes sont plus d'un que cela ajoute "et" entre les termes. Je n'ai besoin que de termes et s'ils sont multiples, ils doivent être séparés par une virgule.

Je veux savoir :

  1. La meilleure approche pour atteindre ces résultats
  2. Est-il recommandé d'utiliser la méthode ci-dessus?
  3. Puis-je utiliser regex pour extraire de la valeur?
  4. Comment puis-je me débarrasser d'un hyperlien?

Merci

1
Alena

Le premier problème avec votre code, je suppose, est que vous utilisez la fonction get_the_taxonomies , qui va:

Récupérer toutes les taxonomies d'une publication avec juste les noms.

Donc, le résultat sera comme ça:

Array
(
    [0] => category
    [1] => post_tag
    [2] => post_format
)

Et je suis à peu près sûr que vous souhaitiez que les termes attribués à un poste donné proviennent de toutes les taxonomies, et non des noms de taxonomies ...

Donc, très probablement, vous voulez faire quelque chose comme ça:

$terms = wp_get_object_terms( get_the_ID(), array_keys( get_the_taxonomies() ) );
foreach ( $terms as $i => $term ) {
    echo ($i ? ', ' : '') . $term->name;
}

Et des réponses rapides à vos questions:

  1. Une des solutions possibles ci-dessus - il est difficile de dire si c'est la meilleure.
  2. Non, votre méthode n'est pas une solution, je suppose.
  3. Il n’est pas nécessaire d’utiliser regex. Vous devriez éviter d'utiliser regex quand vous n'en avez pas besoin.
  4. Vous pouvez vous débarrasser des hyperliens en récupérant des objets et en les imprimant vous-même (comme indiqué ci-dessus).
1
Krzysiek Dróżdż

Jetez un coup d'oeil à ceux-ci:

$taxonomies = get_post_taxonomies( );
print_r( $taxonomies );
echo implode( $taxonomies, ', ' );
0
De Coder