Как в цикле wordpress вывести несколько постов вместе с несколькими тегами без дублей?

Рейтинг: 0Ответов: 1Опубликовано: 10.07.2023

Когда пытаюсь вывести в цикле посты с несколькими тегами посты дублируются. При этом если вывродим внтури категории пост с 1 тегом, то все норм. Где я не прав? Пробовал циклы менять местами, закрывать циклы чтобы было 2 endforeach на каждый цикл, тогда вообще не работает. Надо чтобы, если у поста внтури категории больше одного тега выводился только один пост.Сейчас если 2 тега у поста выводятся 2 одинаковых поста. Прим. На странице 5 табов. Внтури табов +/- одинаковый код только разница с тем из какой категории выводятся посты.

//Получаем посты из категории 4 по 4 поста  
<?php $posts = get_posts ("category=4&orderby=date&numberposts=4"); ?> 
<?php if ($posts) : ?>
<?php foreach ($posts as $post) : setup_postdata ($post); ?>
//Получаем теги для поста
<?php $tags = wp_get_post_tags($post->ID);
foreach ($tags as $tag) {
//Выводим ссылки на теги
    $tag_link = get_tag_link($tag->term_id);?>           
            <div class="col-md-3 col-sm-3 col-xs-12 off-pd line-item">
                <div class="prod-card">
    <a href="<?php echo $tag_link; ?>">
//и картинку поста 
 <img src="<?php the_post_thumbnail_url('medium'); ?>" class="product-img img-responsive" ></a>
                    <div class="product-discr">
                        <p class="product-h"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></p>
                        <p class="product-short"><?php the_field('short_diskr_post') ?></p>
                    </div>
                </div>
            </div>
             <?php
}
?>
<?php wp_reset_postdata(); ?>
<?php endforeach; ?>
<?php endif; ?>
</div>``` 

Ответы

▲ 0Принят

Ладно, может я не совсем понимаю что Вам нужно. По клику на изображение, чтобы пользователь попадал на страницу метки, не слишком очевидное поведение. Но ок, можете получить самый первый тег из массива тегов используя $tags[0], ну и потом получаете ссылку на тег, если он есть.

<?php
$posts = get_posts("category=4&orderby=date&numberposts=4");
if ($posts) :
    foreach ($posts as $post) : setup_postdata ($post);
        $tags = wp_get_post_tags($post->ID);
        // Получаем первый тег для поста
        $tag = $tags[0] ?? false;
?>
        <div class="col-md-3 col-sm-3 col-xs-12 off-pd line-item">
            <div class="prod-card">
                <?php if ($tag) : ?>
                    <a href="<?php echo esc_url(get_tag_link($tag->term_id)); ?>">
                <?php endif; ?>
                    <img src="<?php the_post_thumbnail_url('medium'); ?>" class="product-img img-responsive" >
                <?php if ($tag) : ?>
                    </a>
                <?php endif; ?>
                <div class="product-discr">
                    <p class="product-h"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></p>
                    <p class="product-short"><?php the_field('short_diskr_post') ?></p>
                </div>
            </div>
        </div>
     <?php endforeach; wp_reset_postdata(); ?>
<?php endif; ?>