Задать вопрос
@Denis_8106

Как вывести кастомные категории и посты в цикле?

Есть кастомная таксономия и кастомный тип поста. Как правильно вывести циклом все посты, предварительно сгруппировав их согласно таксономии. Т.е. выводится Таксономия1 (категория) и под ней её посты. Затем Таксономия2 и под ней ее посты и тд. С выводом Таксономий я справился, а вот посты, списком, не выводятся.

<ul>
	<?php
	$cats = get_terms(array('taxonomy' => 'union', 'post_type' => 'city'));
	foreach ($cats as $cat) { ?>
	<li>
		<h2>
			<a href="<?php echo get_term_link($cat); ?>">
				<?php echo get_field('eu-members') . '&nbsp;' . $cat->name . '&nbsp;<small>&#129122;&nbsp;' . get_field('eu-show-more') . '</small>' ?>
			</a>
		</h2>

		<ul>
			<?php
				$query_city = new WP_Query('posts_per_page=-1&order=ASC&post_type=city&taxonomy=' . $cat->term_id);
				while ($query_city->have_posts()) {
					$query_city->the_post();
					$category = get_terms(array('taxonomy' => 'union', 'post_type' => 'city'));
					if ($category[0]->term_id == $cat->term_id) { ?>
			<li>
				<figure><?php the_post_thumbnail() ?></figure>
				<div>
					<span><?php the_title() ?></span>
				</div>
			</li>
			<?php }
				}
				wp_reset_postdata();
				?>
		</ul>
	</li>
	<?php } ?>
</ul>
  • Вопрос задан
  • 38 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 1
artzolin
@artzolin Куратор тега WordPress
php, WordPress разработка сайтов artzolin.ru
У функции get_terms() нет аргумента post_type, а у WP_Query аргумента taxonomy

Для проверки постов, относящихся к определенной категории нужно использовать get_the_terms() или has_term()

<ul>
    <?php
    // Получаем все термины таксономии 'union'
    $cats = get_terms(array('taxonomy' => 'union', 'hide_empty' => false));

    // Цикл по терминам таксономии
    foreach ($cats as $cat) { ?>
    <li>
        <h2>
            <a href="<?php echo get_term_link($cat); ?>">
                <?php echo get_field('eu-members') . '&nbsp;' . $cat->name . '&nbsp;<small>&#129122;&nbsp;' . get_field('eu-show-more') . '</small>' ?>
            </a>
        </h2>

        <ul>
            <?php
            // Создаем новый WP_Query для получения постов текущего термина
            $query_city = new WP_Query(array(
                'posts_per_page' => -1,
                'order' => 'ASC',
                'post_type' => 'city',
                'tax_query' => array(
                    array(
                        'taxonomy' => 'union', // Таксономия
                        'field' => 'term_id',  // Поле термина
                        'terms' => $cat->term_id, // ID термина
                    ),
                ),
            ));

            // Проверяем наличие постов
            if ($query_city->have_posts()) {
                while ($query_city->have_posts()) {
                    $query_city->the_post(); ?>
                    <li>
                        <figure><?php the_post_thumbnail(); ?></figure>
                        <div>
                            <span><?php the_title(); ?></span>
                        </div>
                    </li>
                <?php }
            } else {
                echo '<li>No posts found.</li>';
            }

            // Сбрасываем данные поста
            wp_reset_postdata();
            ?>
        </ul>
    </li>
    <?php } ?>
</ul>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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