Manchmal ist es gewünscht, außerhalb des Standard Loops weitere Loops einzubauen, der unter bestimmten Bedingungen greift. Diese Bedingungen können beispielsweise mit Conditional tags oder ganz einfach aus der derzeitigen Position im Theme heraus entstehen.
Die Startseite wird laut Template Hierarchie in der Template Datei front-page.php realisiert. 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 Conditional tags is_front_page() realisieren lassen.
Der Alternative Loop wird mit einem sogenannten WP_Query realisiert. Das ganze funktioniert eigentlich genauso wie der Standard Loop. Außer das vorher noch ein Array erzeugt wird, wo die Daten des alternativen Loops gespeichert werden. Dann muss an allen Stellen wo etwas ausgegeben werden soll, noch der Bezeichner des alternativen Loops vorangestellt werden.
Im folgendem Beispiel sollen z.B. die letzten 5 Beiträge auf einer statischen Startseite 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 alternative Loop mit benutzerdefinierten Beitragstypen 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 ausgelesene Wert Beiträge pro Seite funktioniert mit benutzerdefinierten Beitragstypen nicht, somit müssen die Variable $number_of_posts und die Variable $offset die mit diesem Werte rechnet, entfernt werden.