Перебор терминов пользовательской таксономии и отображение всех записей для каждого термина
Я использую следующий код, чтобы попытаться перебрать все термины в моей пользовательской таксономии category-film
, а затем вывести название термина как заголовок вместе со всеми пользовательскими записями, которые принадлежат этому термину
<?php $terms = get_terms( 'category-film' ); ?>
<?php foreach( $terms as $term ) : ?>
<?php $posts = new WP_Query( 'post=film&category-film= ' . $term->slug . '&posts_per_page=-1' ); ?>
<?php if( $posts->have_posts() ): while( $posts->have_posts() ) : $posts->the_post(); ?>
<h3><?php echo $term->name; ?></h3>
<p><?php the_title(); ?></p>
<div class="col-md-6">
<?php the_field('url'); ?>
</div>
<?php endwhile; endif; ?>
<?php endforeach; ?>
Однако я обнаружил, что мой код вообще ничего не выводит.
Если я перемещаю <h3><?php echo $term->name; ?></h3>
так, чтобы он находился вне цикла (но внутри цикла foreach
), он нормально выводит названия терминов.
Так что я полагаю, проблема должна быть связана с самим циклом?

Если всё настроено правильно, этот код выведет 10 записей из пользовательского типа записи film
, где таксономия category-film
будет содержать каждый из терминов этой таксономии. Я не знаю о вашем шаблонизаторе, так что разместите вёрстку соответственно.
<?php
// Получаем все термины таксономии 'category-film'
$_terms = get_terms( array('category-film') );
// Перебираем каждый термин
foreach ($_terms as $term) :
$term_slug = $term->slug;
// Создаём запрос для получения постов типа 'film' с текущим термином
$_posts = new WP_Query( array(
'post_type' => 'film',
'posts_per_page' => 10, // важно для избежания предупреждения о лимите памяти PHP
'tax_query' => array(
array(
'taxonomy' => 'category-film',
'field' => 'slug',
'terms' => $term_slug,
),
),
));
// Если есть посты для текущего термина
if( $_posts->have_posts() ) :
// Выводим название термина
echo '<h3>'. $term->name .'</h3>';
echo '<div class="row">';
while ( $_posts->have_posts() ) : $_posts->the_post();
?>
<div class="col-sm-6">
<h4><?php the_title(); ?></h4>
<p><?php echo get_post_meta( get_the_ID(), 'url', true ); ?></p>
</div>
<?php
endwhile;
echo '</div>';
endif;
// Сбрасываем данные поста
wp_reset_postdata();
endforeach;
?>
