Recorrer términos de taxonomía personalizada y mostrar todas las entradas de cada uno

5 oct 2015, 20:56:16
Vistas: 24.3K
Votos: 2

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?

6
Comentarios

No uses $posts como variable personalizada, rompe y afecta el global $posts, es mejor usar algo como $posts_array

Pieter Goosen Pieter Goosen
5 oct 2015 20:58:31

También, solo un comentario, tu consulta es muy costosa :-)

Pieter Goosen Pieter Goosen
5 oct 2015 20:59:00

gracias @PieterGoosen, lo he intentado pero desafortunadamente sigo teniendo el mismo problema. No puedo mostrar nada en el loop, ni siquiera contenido estático

User User
5 oct 2015 21:03:30

Puedes probar algo como esto, solo ten en cuenta que esto se hizo para la consulta principal, por lo que tendrás que ajustarlo ligeramente para una consulta personalizada

Pieter Goosen Pieter Goosen
5 oct 2015 21:03:41

@PieterGoosen ah, ¿qué quieres decir con costoso? Ja... ¿es un poco ineficiente?

User User
5 oct 2015 21:03:59

Usa un tax_query adecuado

Pieter Goosen Pieter Goosen
5 oct 2015 21:04:55
Mostrar los 1 comentarios restantes
Todas las respuestas a la pregunta 1
0
10

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;
?>
5 oct 2015 21:15:30