Das hat mit der Template-Hierarchie zu tun: Vereinfacht ausgedrückt prüft WordPress bei jedem Aufruf einer URL, um welche Art von Inhalt es sich handelt und versucht, dazu ein möglichst passendes Template zu laden. Wird z.B. ein URL für das Archiv der Beiträge mit der Kategorie „News“ aufgerufen, prüft WordPress zuerst, ob es ein Template category-news.php
gibt. Falls nicht, wird nach category-{id}.php
gesucht, dann nach dem allgemeineren category.php
, wenn es das nicht gibt nach archive.php
und zuallerletzt wird für die Anzeige, wenn gar kein passendes Template vorhanden ist, die index.php
genutzt. Das kannst du in dieser Grafik schön (von links nach rechts) ablesen (für eine größere, lesbare Ansicht bitte anklicken):
Nun zurück zu deiner Frage: ein Template single.php
wird nur zur Darstellung einzelner Beiträge verwendet. Deshalb spuckt die Loop auch nicht mehr aus. Möchtest du zusätzlich zum Beispiel die neuesten 3 Beiträge ausgeben, musst du eine weitere WP-Query einfügen:
// The Query
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page'=> 3,
'order' =>'DESC',
'orderby' =>'ID',
);
$the_query = new WP_Query( $args );
// The Loop
if ( $the_query->have_posts() ) {
echo '<ul>';
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '<li>' . get_the_title() . '</li>';
}
echo '</ul>';
} else {
// no posts found
}
/* Restore original Post Data */
wp_reset_postdata();
Thread-Starter
efaq
(@efaq)
Hi,
sorry!! ich hatte gar nicht mehr geantwortet. Okay cool. Danke, dass hilft mir schon mal weiter.
1) Danke für deine Erläuterung. Werden die Parameter in der Queue auch ausgebgen?
2) Wenn ich folgenden Code auf der front-page.php ausgebe, lädt die Seite aber unendlich:
<?php
while(have_posts()) {
the_content();
}
?>
Warum? Wieso iteriert er hier nicht nur so lange, so lange es Posts gibt? Ich mein klar, er gibt ja die ganze Zeit den content aus, weil die Bedingung true ist. Aber wieso wird es hier unendlich mal ausgegeben, während es wo anders nur so lange ausgegeben wird, solange posts enthalten sind?
Die Loop sollte so aussehen:
<?php
if ( have_posts() ) {
while ( have_posts() ) {
the_post();
//
// Post Content here
//
} // end while
} // end if
?>
vgl. The Loop
Die Parameter für eine Query geben an, was abgerufen werden soll. Sie werden eigentlich nicht mit ausgegeben, wenn du es nicht ausdrücklich möchtest.