Im Forum von wordpress.de gibt es des öfteren die Frage, wie man denn den letzten, also den neusten Beitrag auf Übersichtsseiten - also Frontpage, Archiv, Kategorieseite - anders stylen kann, um ihn optisch von den älteren abzugrenzen. Dazu gibt es prinzipiell zwei Möglichkeiten. Auf Formatierungen wird hier keine Rücksicht genommen, es soll nur gezeigt werden, wie man den ersten Eintrag explizit ansprechen kann.
Möglichkeit 1: 1, 2, 3...
Die erste Möglichkeit ist das simple Durchzählen, welcher Beitrag gerade in der Loop bearbeitet wird.Dazu wird der Zähler vor der Loop initialisiert, innerhalb der Loop in gleichmäßigen Schritten erhöht und abgefragt.
<?php $counter = 1;
if(have_posts()) : while(have_posts()) : the_post();
if($counter == '1') { ?>
... Hier wird der erste Beitrag formatiert ...
<?php $counter++;
} else { ?>
... Hier werden alle anderen Beiträge formatiert ...
<?php }
endwhile; endif; ?>
Der Zähler hat den Anfangswert 1. Solange dieser Wert noch gespeichert ist, befindet sich die Loop beim ersten Beitrag, der entsprechend den Wünschen formatiert werden kann. Danach wird der Zähler um 1 erhöht, so dass beim nächsten Durchlauf die Bedingung der if-Schleife nicht mehr zutrifft und der else-Teil abgearbeitet wird, also alle anderen Beiträge in der Loop.
Möglichkeit 2: Cut! ...and Action!
Was viele nicht wissen, man kann die Loop ohne weiteres unterbrechen und zu einem späteren Zeitpunkt fortsetzen, man muss nicht alle Beiträge auf einmal abarbeiten. Folgendes Beispiel:
<?php if(have_posts()) : the_post() ?>
... Formatierungen für den ersten Beitrag ...
<?php endif; ?>
<!-- Hier kann noch jede Menge andere Informationen stehen -->
<?php while(have_posts()) : the_post() ?>
... Formatierungen für alle anderen Beiträge ...
<?php endwhile; ?>
Es wird abgefragt, ob Beiträge in der Loop vorhanden sind. Im ersten Durchlauf wird die while-Schleife weg gelassen, es wird nur genau ein Beitrag abgearbeitet - der Erste. Erst zu einem späteren Zeitpunkt werden via der jetzt vorhandenen while-Schleife auch die älteren Beiträge bearbeitet, die Loop befindet sich zu diesem Zeitpunkt beim zweiten Beitrag. Diese Lösung erfordert keine zusätzlichen Abfragen, wo man sich gerade in der Loop befindet, setzt allerdings vorraus, dass mindestens 2 Beiträge in der gewünschten Ansicht vorhanden sind. Ohne würde die while-Schleife eine Fehlermeldung erzeugen.
Schluss
Beide Möglichkeiten unterscheiden sich nicht in ihrer Funktionalität, allerdings ist die erste Variante sicherlich flexibler. Im Beispiel wurde nur darauf eingegangen, wie der erste Beitrag angesprochen werden kann, man könnte aber auch mehrere Beiträge abfragen, jeden zweiten, dritten oder oder oder. Die zweite Methode verzichtet dafür auf eine weitere Variable und eine permanente Abfrage, wo man sich gerade befindet. Sind die Vorraussetzungen gegeben würde ich persönlich dieser Methode den Vorzug geben.
Update 27. September
Beide Möglichkeiten formatieren die entsprechende Seite grundsätzlich so, dass der erste angezeigte Beitrag anders dargestellt wird. Dies ist vielleicht nicht gewünscht, man möchte zum Beispiel, das wirklich nur der zuletzt geschrieben Beitrag anders dargestellt wird. Nehmen wir als Beispiel 10 Beiträge, wobei immer nur 5 pro Seite angezeigt werden sollen. Das würde bedeuten, dass auf der nächsten Seite Beitrag Nr. 6 ebenfalls anders dargestellt werden würde.
Um dieses Verhalten zu unterbinden bedarf es nur einer geringfügigen Änderung:
global $paged
Diese Zeile wird einmal vor die Loop geschrieben. $paged ist eine Variable, in der gespeichert wird, auf welcher Seite wir uns gerade befinden. WordPress weiss darüber, welche Beiträge überhaupt ausgegeben werden sollen. Zurück zu unserem Beispiel: Befinden wir uns auf Seite 2, sollen die Beiträge 6 - 10 ausgegeben werden, und so weiter.
Beim Beispiel des Durchzählens wird die Zeile
if($counter == '1') { ?>
durch
if($counter == '1' && ($paged == '' || $paged < 2)) { ?>
ersetzt. Bei der neuen Bedingungsabfrage, das ist kein "doppelten" sondern 'einfache' Anführungszeichen. Bei der zweiten Möglichkeit wird die Zeile
<?php if(have_posts()) : the_post() ?>
durch
<?php(if(have_posts() && ($paged == '' || $paged < 2)) : the_post() ?>
ersetzt. Auch hier, wieder einfache Anführungszeichen.
Zusammengefasst gesagt wurde die Bedingung der Schleife erweitert. Befinden wir uns auf der ersten Seite, soll der erste Beitrag anders formatiert werden. Ist das nicht der Fall, werden alle Beiträge gleich behandelt. Damit ist sicher gestellt, dass wirklich nur der erste, also zuletzt geschriebene, Beitrag anders formatiert wird.