web-dev-qa-db-fra.com

L'archive taxonomie personnalisée de Wordpress Genesis montre 3 répétitions de chaque message

J'utilise un thème enfant sur la genèse. J'ai configuré un type d'article personnalisé et une taxonomie personnalisée, et j'utilise des champs personnalisés avancés pour mettre une galerie sur chaque page du CPT. Sur les pages d’archives taxonomiques, je voudrais montrer une seule image de chaque galerie sous forme de vignette, reliée au message. J'ai réussi à configurer cela en utilisant un nouveau modèle pour la taxonomie personnalisée, mais si je règle 'numberposts' => -1 pour afficher tous les articles, je reçois huit répétitions de chaque article/vignette. Si je le règle sur 'numberposts' => 1, j'obtiens 3 répétitions de chaque message/vignette. Comment puis-je afficher une seule vignette de chaque message?

Je ne sais pas avec certitude qu'il s'agit d'un problème de wordpress, mais je pense que cela doit avoir un lien avec la façon dont je configure la boucle personnalisée.

<?php
//* Template Name: Press Release; Archive

remove_action ('genesis_loop', 'genesis_do_loop'); // Remove the standard loop 
add_action ('genesis_after_loop', 'collection_categories'); // add custom loop
function collection_categories(){

$terms = get_terms('collection_categories');
foreach($terms as $term) {
$posts = get_posts(array(
        'post_type' => 'collections',
        'tax_query' => array(
            array(
                'taxonomy' => 'collection_categories',
                'field' => 'slug',
                'terms' => $term->slug
            )
        ),
        'numberposts' => 1
    ));

foreach($posts as $post) {

//* One image from gallery on archive pages

        if ( have_posts() ) : 
while ( have_posts() ) : the_post();

    $images = get_field('gallery'); 
    $image_1 = $images[0];
    $link = get_the_permalink();

?>

<a href="<?php echo $link ?>"><img src="<?php echo $image_1['sizes']    ['thumbnail']; ?>" alt="<?php echo $image_1['alt']; ?>" /></a>
<?php

        endwhile;
        endif;
}
}
}
genesis();
1
apol

Vous utilisez une boucle imbriquée dans votre code. Vous ne devez utiliser que la boucle foreach et transmettre l'ID de publication à get_field(). Voici un exemple:

$terms = get_terms( 
    [ 
        'taxonomy' => 'collection_categories', 
        'orderby'  => 'name', 
        'order'    => 'DESC'
    ] 
);

// Rest of the code  here 

foreach ( $posts as $post ) {

    //* One image from gallery on archive pages
    $images  = get_field( 'gallery', $post->ID ); 
    $image_1 = $images[0];

    ?>

    <a href="<?php the_permalink( $post->ID ); ?>">
        <img src="<?php echo $image_1['sizes']['thumbnail']; ?>" alt="<?php echo $image_1['alt']; ?>" />
    </a><?php

}

// Don't forget to reset the postdata
wp_reset_postdata();
2
Jack Johansson