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

2 Antworten

  1. Dunkelangst

    Vielen Dank für diesen Beitrag. Jetzt hab auch ich endlich mal verstanden, was es mit dem Loop auf sich hat. ;-)

    Mir fällt auch auf, dass dein php-code hier in dem Beitrag in Farbe angezeigt wird. Dies bekomme ich derzeit nicht hin. Verwendest du diesbezüglich ein Plugin?

    Ganz liebe Grüße

  2. Christian Imhorst

    Ja genau, ich benutze das Plugin WP-Syntax. Allerdings habe ich noch ein bisschen mehr Aufwand betrieben, da es (leider) sehr trickreich ist, Quellcode-Beispielen in WordPress abzubilden.

    Ich hoffe, dass ich dir weiter helfen konnte.

    Viele Grüße
    Christian