@solomonfox

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

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

<div id="tab-3" class="tab__content hidden-tab-content">    
//Получаем посты из категории 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>

Если к посту поставить 2 тега то выведется один и тот же пост в этой категории с двумя тегами. Т.е. дубль. Почему, как этого избежать, где я ошибся?
  • Вопрос задан
  • 104 просмотра
Пригласить эксперта
Ответы на вопрос 3
@its2easyy
Добавить global $post; в начало, если его там нет.
Перенести wp_reset_postdata(); за endforeach;
Если сработает, то почитать почему.
Ответ написан
Комментировать
@solomonfox Автор вопроса
Не помогло. Выносил wp_reset_postdata(); и global $post; добавлял. Возможно доавлял не туда но я перетыкал везде где молжно и не можно. Или вы хотели чтобы я к каждому циклу их 5 добавил?
Ответ написан
Комментировать
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
<?php

$args = array(
	'category'       => 4,
	'orderby'        => 'date',
	'posts_per_page' => 4,
);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
	while ( $query->have_posts() ) {
		$query->the_post(); ?>

		<div class="col-md-3 col-sm-3 col-xs-12 off-pd line-item">
			<div class="prod-card">

				<?php $tags = get_the_tags(); ?>
				<?php if ( $tags ) { ?>
					<ul class="tag-list">
						<?php foreach ( $tags as $key => $tag ) { ?>
							<li class="tag-list__item">
								<a href="<?php echo get_tag_link( $tag->term_id ); ?>" class="product-tag"></a>
							</li>
						<?php } ?>
					</ul>
				<?php } ?>

				<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>
					<?php if ( get_field( 'short_diskr_post' ) ): ?>
						<p class="product-short"><?php the_field( 'short_diskr_post' ); ?></p>
					<?php endif; ?>
				</div>
			</div>
		</div>

		<?php
	}
}

wp_reset_postdata();

?>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы