Daten|teiler
Kopieren als Kulturtechnik

Ein Loop im Loop

9. Februar 2010 von Christian Imhorst

In WordPress wird der Loop dazu benutzt, Beiträge wie Artikel oder Seiten im Weblog anzuzeigen. Der klassische Loop ist meist Teil der Datei index.php, dem Hauptindex-Template, und sieht — stark vereinfacht — folgendermaßen aus:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php the_content(); ?>
 
 <?php endwhile; else: ?>
 <p><?php _e('Verzeihung, aber was Sie suchen, ist nicht hier.'); ?></p>
 <?php endif; ?>

Benutzt man WordPress mehr als Content-Management-System (CMS) und weniger als Weblog, hat man häufig eine statische Seite als Startseite gewählt. Möchte man auf dieser Seite dann den aktuellsten Beitrag aus der ersten Kategorie veröffentlichen, könnte man folgenden Loop auf der statischen Seite unterbringen:

<?php query_posts('cat=1&showposts=1'); ?>
<?php while(have_posts()) : the_post(); ?>
<p id="post-<?php the_ID(); ?>"><strong><?php the_title(); ?></strong>
<?php the_content(); ?>
</p>
 
<?php endwhile; ?>

Damit PHP-Code innerhalb einer statischen Seite oder eines Artikels funktioniert, muss allerdings das Exec-PHP-Plugin installiert sein. Nun hat man das Problem, das WordPress diese beiden Loops nicht unterscheiden kann und sie daher zweimal ausführt. Wenn also, wie im Beispiel, der aktuellste Artikel auf der Seite stehen soll, wird er einmal vom Loop in der Datei index.php und einmal vom Loop in der statischen Seite ausgegeben. Das heißt, der selbe Artikel erscheint zweimal auf dieser Seite.

Die Lösung in diesem Fall heißt, dass man ein neues Query-Objekt erstellt:

 
<?php
$myQuery = new WP_Query('showposts=1&cat=3');
while ($myQuery->have_posts()) : $myQuery->the_post();
?>
<p id="post-<?php the_ID(); ?>"><strong><?php the_title(); ?></strong>
<?php the_content(); ?>
</p>
<?php endwhile; ?>

Die Funktion WP_Query dient zum Auffinden verschiedenster Beiträge in der Datenbank und kann analog zu Query_posts verwendet werden. Damit kann man kontrollieren, welche Beiträge in einem Loop angezeigt werden und beide Loops voneinander unterscheiden.

Geschrieben in Haustechnik