Parcurgerea termenilor din taxonomii personalizate și afișarea tuturor articolelor pentru fiecare

5 oct. 2015, 20:56:16
Vizualizări: 24.3K
Voturi: 2

Folosesc următorul cod pentru a încerca să parcurg fiecare termen din taxonomia mea personalizată category-film și să afișez numele termenului ca titlu împreună cu toate articolele personalizate care aparțin acelui termen

<?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; ?>

Observ totuși că acest cod nu afișează absolut nimic.

Dacă mut <h3><?php echo $term->name; ?></h3> astfel încât să fie în afara buclei (dar în interiorul buclei foreach) afișează corect numele termenilor.

Așa că îmi imaginez că problema trebuie să fie legată de bucla în sine?

6
Comentarii

Nu folosi $posts ca variabilă personalizată, întrerupe și afectează variabila globală $posts, mai bine folosește ceva gen $posts_array

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

De asemenea, doar o observație, interogarea ta este foarte costisitoare :-)

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

mersi @PieterGoosen, am încercat asta dar din păcate încă am aceeași problemă. Nu reușesc să afișez nimic în loop, nici măcar conținut static

User User
5 oct. 2015 21:03:30

Puteți încerca ceva de genul acesta, doar rețineți că acest lucru a fost făcut pentru interogarea principală, așa că va trebui să îl ajustați ușor pentru o interogare personalizată

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

@PieterGoosen ah, ce înțelegi prin costisitor? Ha... este puțin ineficient?

User User
5 oct. 2015 21:03:59

Folosiți un tax_query corect

Pieter Goosen Pieter Goosen
5 oct. 2015 21:04:55
Arată celelalte 1 comentarii
Toate răspunsurile la întrebare 1
0
10

Dacă elementele tale sunt configurate corect, acest cod va afișa 10 postări din tipul de postare personalizat film, unde taxonomia este category-film și va afișa fiecare termen al acelei taxonomii specifice. Nu sunt conștient de șablonarea ta, așa că aranjează layout-ul în consecință.

<?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, //important pentru a evita avertismentele de limită de memorie 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