@Denis_8106

Как вывести посты таксономии текущего поста?

Есть шаблон поста для нескольких таксономий. Нужно в нём выводить только все посты таксономии текущего поста. Я думал как-то так
<ul class="list_unions">
	<?php
	$cats = get_terms(array('taxonomy' => 'union'));
	foreach ($cats as $cat) {
		$query = new WP_Query(array(
			'post_type' => 'city',
			'tax_query' => array(
				array(
					'taxonomy' => 'union',
					'field' => 'term_id',
					'terms' => $cat->term_id,
				),
			),
			'posts_per_page' => -1,
			'order' => 'ASC',
		));
		if ($query->have_posts()) { ?>
			<?php while ($query->have_posts()) {
				$query->the_post();
				$termini = get_the_terms( get_the_ID(), 'union' );
				if ($cat->term_id == $termini[0]->term_id) { ?>
					<li>
						<figure>
							<?php the_post_thumbnail(); ?>
						</figure>
						<p><?php the_title(); ?></p>
					</li>
	<?php }
			}
		}
		wp_reset_postdata();
	}
	?>
</ul>


Но при данной проверке, выводятся все посты, всех таксономий. А мне нужно только посты, согласно таксономии текущего поста. Как правильно написать эту проверку?
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
@Denis_8106 Автор вопроса
Я нашел такое решение. Возможно оно не идеальное, но рабочее.

<ul class="list_union">
	<?php
	$cats = get_terms(array('taxonomy' => 'union'));
	foreach ($cats as $cat) {
		$query = new WP_Query(array(
			'post_type' => 'city',
			'tax_query' => array(
				array(
					'taxonomy' => 'union',
					'field' => 'term_id',
					'terms' => $cat->term_id,
				),
			),
			'posts_per_page' => -1,
			'order' => 'ASC',
		));
		// Получим только первый термин (1ю категорию тек.поста)
		$terms = get_the_terms($post->ID, 'union');
		if ($terms) {
			$term = array_shift($terms);
			// Проверяем и прокручиваем посты в цикле
			if ($query->have_posts()) {
				while ($query->have_posts()) {
					$query->the_post();
					// Сравниваем тек.таксономию с таксономией поста
					if ($cat->term_id == $term->term_id) { ?>
						<li>
							<figure>
								<?php the_post_thumbnail(); ?>
							</figure>
							<p><?php the_title(); ?></p>
						</li>
	<?php }
				}
			}
		}
		wp_reset_postdata();
	}
	?>
</ul>
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
YBB
@YBB
Используйте get_the_terms() вместо get_terms()
https://developer.wordpress.org/reference/function...
Ответ написан
Ваш ответ на вопрос

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

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