it-swarm.com.de

Holen Sie sich einen Beitrag von anderen Schleife jeweils n-Beiträge in der Hauptschleife

Hier ist das Layout, das ich erreichen möchte.

  • 1. Reihe: drei Beiträge in drei Spalten aus Kategorie A
  • 2. Reihe: ein vollbreiter Pfosten aus Kategorie B
  • 3. Reihe: die nächsten drei Beiträge aus Kategorie A
  • 4. Reihe: der nächste Beitrag aus Kategorie B
  • usw.

Es sieht aus wie das:

-------------------------
| CAT A | CAT A | CAT A |
-------------------------
|         CAT B         |
-------------------------
| CAT A | CAT A | CAT A |
-------------------------
|         CAT B         |
-------------------------
| CAT A | CAT A | CAT A |
-------------------------
|         CAT B         |

Grundsätzlich gibt es zwei Schleifen, eine in der anderen, die parallel und einzeln verlaufen.

Ich kann die Nummer des aktuellen Beitrags der Hauptschleife durch $wp_query->current_post ermitteln und nach jedem dritten Beitrag einen neuen WP_Query mit nur einem Beitrag (durch posts_per_page=>1) einfügen und um die Nummer der vorherigen Beiträge (durch offset=>$wp_query->current_post) versetzen.

Ich fürchte, dies ist eine sehr speicherintensive Sache, um nach jedem dritten Beitrag eine neue WP_query aufzurufen. Gibt es bessere Alternativen zum Anzeigen von Posts in dem oben angegebenen Markup? Danke vielmals.

1
Sergey

Folgendes können Sie tun. Führen Sie oben auf Ihrer Seite Ihre erste WP_Query aus. Berechnen Sie die Anzahl der Posts, die Sie für Ihre sekundäre Abfrage benötigen, indem Sie die Anzahl der Posts IN query cat_a dividieren und PHP floor () verwenden, um alle zu löschen Rest. Auf diese Weise stellen Sie sicher, dass Ihre zweite Abfrage nur die genaue Anzahl von Posts enthält, die erforderlich sind, um das gewünschte Muster zu erhalten.

Bei der Anzeige können wir PHP-Modul verwenden, um unseren Beitrag cat_b anzuzeigen, bevor cat_a 4 (Inkremente) jemals angezeigt wird. In diesem Fall gebe ich The Loop of cat_b ein, aber unterbreche , damit WordPress nachverfolgt, wo wir uns in unserer Schleife befinden und wir nicht müssen.

Insgesamt sieht die Idee so aus. Ich habe keine davon getestet. Wenn Sie also auf Probleme stoßen , aktivieren Sie das Debugging und prüfen Sie, ob Sie PHP Fehler beheben können .

$cat_b = '';
$cat_a = new WP_Query( array(
    'category'          => 'a',
    'posts_per_page'    => 60,
) );

if( $cat_a->have_posts() ) {
    $num_posts = floor( $cat_a->post_count / 3 );

    if( $num_posts > 0 ) {
        $cat_b = new WP_Query( array(
            'category'      => 'b',
            'posts_per_page'=> $num_posts,
        ) );
    }
}


if( $cat_a->have_posts() ) : $index = 1; ?>

    <?php while( $cat_a->have_posts() ) : $cat_a->the_post(); ?>

        <?php if( ! empty( $cat_b ) && 0 == $index % 4 && $cat_b->have_posts() ) : ?>

            <?php while( $cat_b->have_posts() ) : $cat_b->the_post();

                <h1><?php the_title(); ?></h1>

            <?php
                wp_reset_postdata();
                break;
                endwhile;
            ?>

        <?php endif; ?>

        <h1><?php the_title(); ?></h1>

    <?php
        $index++;
        endwhile;
    ?>

<?php
    wp_reset_postdata();
    endif;
?>
1
Howdy_McGee