Manchmal ist es gewünscht, außerhalb des Standard Loops weitere Loops einzu­bauen, der unter bestimmten Bedin­gungen greift. Diese Bedin­gungen können beispiels­weise mit Condi­tional tags oder ganz einfach aus der derzei­tigen Position im Theme heraus entstehen.

Die Start­seite wird laut Template Hierarchie in der Template Datei front-page.php reali­siert. Diese könnte z.B. eine Kopie der page.php sein, wo ein weiteres tertiäres Template geladen wird, welches in der page.php nicht geladen wird. Dieses Beispiel würde sich auch anhand des Condi­tional tags is_front_page() reali­sieren lassen.

Der Alter­native Loop wird mit einem sogenannten WP_Query reali­siert. Das ganze funktio­niert eigentlich genauso wie der Standard Loop. Außer das vorher noch ein Array erzeugt wird, wo die Daten des alter­na­tiven Loops gespei­chert werden. Dann muss an allen Stellen wo etwas ausge­geben werden soll, noch der Bezeichner des alter­na­tiven Loops voran­ge­stellt werden.

Im folgendem Beispiel sollen z.B. die letzten 5 Beiträge auf einer stati­schen Start­seite angezeigt werden.

<?php //Start des alternativen Loops
            
            $number_of_posts = get_option('posts_per_page',10); //Ermittelt den eingestellten Wert Beiträge pro Seite. 10 Fallback-Lösung
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; //Liest die aktuelle Seite innerhalb der Pagination aus
            $offset = ($paged - 1) * $number_of_posts; //Berechnet aus posts_per_page um wie viel Beiträge der Loop verschoben werden muss
            
            $args = array(             //Erstellt ein Array mit dem Bezeichner $args                                                  
                'post_type' => 'post', //Definiert das Beiträge gelooped werden
                'posts_per_page' => 3, //Anzahl der anzuzeigenden Beiträge
                'offset' => $offset,   //verschiebt den Wert des Loops um den in der Variable ermittelten Betrag
                'paged' => $paged      //aktiviert die Pagination für diesen Loop
            );                         //Ende des Array
            
            $loop2 = new WP_Query($args); //Es wird ein WP_Query mit dem Bezeichner $loop2 und dem Inhalt des Arrays $args erstellt
            
            
            if ( $loop2->have_posts() ) : while ( $loop2->have_posts() ) : $loop2->the_post(); ?> <!--Start des alternativen Loops-->
                <?php get_template_part('template_parts/content');?><!--Lädt die content.php-->
            <?php endwhile; else : ?> <!--Ende While-Schleife des Loops-->
                <?php get_template_part('template_parts/content','error');?><!--Lädt die content-error.php-->
            <?php endif;?> <!--Ende der if-Anweisung des Loops-->
	            
                <?php previous_posts_link('Vorherige Seite',$loop2->max_num_pages);?> <!--Link zum vorigen Beitrag-->
                <?php next_posts_link('Nächste Seite',$loop2->max_num_pages);?> <!--Link zum nächsten Beitrag-->
            
<?php wp_reset_postdata();?> <!--Reset des Loops-->

Achtung! Wird der alter­native Loop mit benut­zer­de­fi­nierten Beitrags­typen benutzt, muss dieser leicht angepasst werden, da die Query Funktion posts_per_page nur den Standard Beitragstyp erfasst.

<?php //Start des alternativen Loops
            
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; //Liest die aktuelle Seite innerhalb der Pagination aus
            
            $args = array(             //Erstellt ein Array mit dem Bezeichner $args                                                  
                'post_type' => 'post', //Definiert das Beiträge gelooped werden
                'posts_per_page' => 3, //Anzahl der anzuzeigenden Beiträge
                'paged' => $paged      //aktiviert die Pagination für diesen Loop
            );                         //Ende des Array
            
            $loop2 = new WP_Query($args); //Es wird ein WP_Query mit dem Bezeichner $loop2 und dem Inhalt des Arrays $args erstellt
            
            
            if ( $loop2->have_posts() ) : while ( $loop2->have_posts() ) : $loop2->the_post(); ?> <!--Start des alternativen Loops-->
                <?php get_template_part('template_parts/content');?><!--Lädt die content.php-->
            <?php endwhile; else : ?> <!--Ende While-Schleife des Loops-->
                <?php get_template_part('template_parts/content','error');?><!--Lädt die content-error.php-->
            <?php endif;?> <!--Ende der if-Anweisung des Loops-->
	            
                <?php previous_posts_link('Vorherige Seite',$loop2->max_num_pages);?> <!--Link zum vorigen Beitrag-->
                <?php next_posts_link('Nächste Seite',$loop2->max_num_pages);?> <!--Link zum nächsten Beitrag-->
            
<?php wp_reset_postdata();?> <!--Reset des Loops-->

Der im Backend ausge­lesene Wert Beiträge pro Seite funktio­niert mit benut­zer­de­fi­nierten Beitrags­typen nicht, somit müssen die Variable $number_of_posts und die Variable $offset die mit diesem Werte rechnet, entfernt werden.