Recorrer términos de taxonomía personalizada y mostrar todas las entradas de cada uno
Estoy usando el siguiente código para intentar recorrer cada uno de los términos dentro de mi taxonomía personalizada category-film
y luego mostrar el nombre del término como encabezado junto con todas las entradas personalizadas que pertenecen a ese término
<?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; ?>
Sin embargo, encuentro que mi código no muestra absolutamente nada.
Si muevo <h3><?php echo $term->name; ?></h3>
para que esté fuera del bucle (pero dentro del bucle foreach
) muestra correctamente los nombres de los términos.
Así que me imagino que el problema debe estar relacionado con el bucle en sí mismo, ¿no?

Si todo está configurado correctamente, este código mostrará 10 publicaciones del CPT film
, donde la taxonomía es category-film
y se recorrerá cada uno de los términos de esa taxonomía específica. No estoy al tanto de tu plantilla, así que adapta el diseño según corresponda.
<?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 para evitar advertencias de límite de memoria en 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;
?>
