web-dev-qa-db-fra.com

Répertorier les termes de taxonomie personnalisés à partir du champ personnalisé

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; ?>
1
itrogers

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; ?>
2
fischi