J'essaie de générer une liste de termes associés à une taxonomie personnalisée pour chaque image extraite d'un champ personnalisé, comme suit:
$portfolio_images = get_field('portfolio_gallery');
Chaque image est associée à des champs WP standard, tels que tailles, titre, légende, etc. J'aimerais afficher la liste des termes associés à chaque image à partir de la taxonomie media_category
.
J'utilise get_the_terms
dans une autre variable, mais je pense que quelque chose ne va pas avec mon instruction foreach
. Toute aide serait appréciée. Code complet:
<?php
$portfolio_images = get_field('portfolio_gallery');
foreach( $portfolio_images as $portfolio_image ):
$labels = get_the_terms( $portfolio_image['ID'], 'media_category' );
?>
<li class="gallery-item" data-myorder="<?php echo $labels; ?>">
<img src="<?php echo $portfolio_image['sizes']['portfolio-thumbnail']; ?>" alt="<?php echo $portfolio_image['alt']; ?>" />
<div class="mask">
<a class="mask-link" href="<?php echo $portfolio_image['url']; ?>">
<div class="mask-content">
<h4><?php echo $portfolio_image['title']; ?></h4>
<p><?php echo $portfolio_image['caption']; ?></p>
</div>
</a>
</div>
</li>
<?php endforeach; ?>
Le problème auquel vous faites face est que get_the_terms()
renvoie une array
(ou false ou un objet WP_Error
-), et non une chaîne.
Donc, en supposant que vous ayez plusieurs termes pour les images, vous pouvez utiliser un code comme celui-ci:
if( $labels && !is_wp_error( $labels ) ) {
foreach( $labels as $label ) {
$labelarray[] = $label->name;
}
$labelstring = join( ", ", $labelarray );
}
Cela parcourt vos étiquettes, si aucune erreur ne se produit. Vous voudrez peut-être ajuster le $labelstring
à vos besoins, celui-ci produisant une valeur telle que label1, label2, label3
. Vous pouvez simplement sauter les deux points, si vous n'en avez pas besoin.
Votre code entier ressemblerait à ceci:
<?php
$portfolio_images = get_field('portfolio_gallery');
foreach( $portfolio_images as $portfolio_image ):
unset( $labelarray );
$labels = get_the_terms( $portfolio_image['ID'], 'media_category' );
if( $labels && !is_wp_error( $labels ) ) {
foreach( $labels as $label ) {
$labelarray[] = $label->name;
}
$labelstring = join( ", ", $labelarray );
}
?>
<li class="gallery-item" data-myorder="<?php echo $labelstring; ?>">
<img src="<?php echo $portfolio_image['sizes']['portfolio-thumbnail']; ?>" alt="<?php echo $portfolio_image['alt']; ?>" />
<div class="mask">
<a class="mask-link" href="<?php echo $portfolio_image['url']; ?>">
<div class="mask-content">
<h4><?php echo $portfolio_image['title']; ?></h4>
<p><?php echo $portfolio_image['caption']; ?></p>
</div>
</a>
</div>
</li>
<?php endforeach; ?>