Iterazione attraverso i termini della tassonomia personalizzata e visualizzazione di tutti i post per ciascuno
Sto usando il seguente codice per cercare di iterare attraverso ciascuno dei termini nella mia tassonomia personalizzata category-film e poi mostrare il nome del termine come intestazione insieme a tutti i post personalizzati che appartengono a quel termine
<?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; ?>
Tuttavia, sto riscontrando che il mio codice non produce assolutamente nulla.
Se sposto <h3><?php echo $term->name; ?></h3> in modo che sia fuori dal loop (ma all'interno del loop foreach) mostra correttamente i nomi dei termini.
Quindi immagino che il problema debba essere qualcosa relativo al loop stesso?
Se le tue cose sono configurate correttamente, questo codice mostrerà 10 post del CPT film, dove la tassonomia è category-film e verrà mostrato ogni termine di quella specifica tassonomia. Non sono a conoscenza del tuo sistema di templating, quindi adatta il layout di conseguenza.
<?php
$_terms = get_terms( array('category-film') );
foreach ($_terms as $term) :
$term_slug = $term->slug;
$_posts = new WP_Query( array(
'post_type' => 'film',
'posts_per_page' => 10, //importante per evitare warning di limite di memoria 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;
?>