single.php – Template für Beiträge/Posts

Bevor wir die single.php anlegen, schau dir nochmal die WordPress Template Hierarchie an. Anfangs habe ich schon erwähnt, dass die Dateien index.php + style.css zusammen schon ein voll funktionsfähiges Template ausmachen. Möchte man das Template aber spezialisieren, braucht man weitere Template-Dateien, in diesem Fall die single.php.

Wofür ist die single.php

Wenn WordPress einen Einzel-Beitrag anzeigen soll, schaut es im Template-Ordner erstmal nach der Datei „single.php“. Wenn er sie findet, benutzt er diese Template-Datei um die Seite anzuzeigen, findet er sie nicht, greift er auf die „index.php“ zur Anzeige zurück. Dies ist bislang bei uns so der Fall, doch das wollen wir nun ändern.

Erzeuge die Datei „single.php“ im Template-Ordner und kopiere den kompletten Code aus der index.php und füge ihn in die single.php ein (kopieren nicht ausschneiden):

single.php

<?php get_header(); ?>

	<div id="main">
		
		<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
			<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
			<div class="entry">
				<?php the_content(); ?>
			</div>
		<?php endwhile; endif; ?>
		
	</div><!-- main -->
	
	<div id="sidebar">
		<?php get_sidebar(); ?>
	</div><!-- sidebar -->	

<?php get_footer(); ?>

Nun sollten wir zwei Dateien mit identischem Code haben. Ab jetzt nehmen wir nur noch Änderungen an der „single.php“ vor. Als erstes wollen wir unterhalb des Beitrag-Titels den Namen des Autor, das Datum der Veröffentlichung und die Kategorie des Beitrags anzeigen:

<?php get_header(); ?>

	<div id="main">
		
		<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
			<h2><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></h2>
			<div id="meta">
				<p>erstellt am: <?php the_date('d.m.Y'); ?> | 
				von: <?php the_author(); ?> | 
				Kategorie(n): <?php the_category(', '); ?></p>
			</div>
			<div class="entry">
				<?php the_content(); ?>
			</div>
		<?php endwhile; endif; ?>
		
	</div><!-- main -->
	
	<div id="sidebar">
		<?php get_sidebar(); ?>
	</div><!-- sidebar -->	

<?php get_footer(); ?>

Im Grunde greife ich einfach nur über die Template Tags auf die Werte zu, die ich brauche. the_date() gibt mir das Datum aus, wann der Artikel erstellt wurde (es gibt einige Formatierungsmöglichkeiten, man muss lediglich den Parameter-Wert anpassen). Als nächstes gebe ich mit „the_author()“ den Autor des Beitrags aus und mit „the_category(‚, ‚)“ folgt eine kommaseparierte Liste der Kategorien, mit denen der Beitrag assoziiert ist. Alles in allem recht einfach, du überlegst welchen Wert du anzeigen möchtest, schaust nach, welche Funktion dafür zuständig ist und passt dir das Ergebnis mit den nötigen Parameter-Werten an, easy as pie.

hier geht's weiter...



Kommentare


im letzten Code-Beispiel fehlt in Zeile 8 das um mit dem Absatz zu beginnen


Danke für den Hinweis, ist korrigiert.


Hallo,

leider wird die single.php nicht geladen, es ist genauso eingerichtet wie hier beschrieben. Ebenso sieht es mit der comments.php aus. Ich benutze die deutsche wordpress version.

Ausgehend vom Twenty Ten Theme werden sie angezeigt, das Ganze läuft über einen localhost und Mamp.


es funktioniert alles, wen ich den Code der single.php in die index.php setze.


Mh..

hast du den Dateinamen groß- oder kleingeschrieben? (single.php ist korrekt)

Wenn das nichts bringt, lösche testweise mal den Inhalt der single.php und schreibe lediglich "single.php" in die Datei. Wenn du nun einen Beitrag aufrufst, sollte "single.php" ausgegeben werden (ist dann zwar noch nicht die Lösung, aber man kann den Fehler weiter eingrenzen).


Danke für die Antwort, also, ich glaube ich habe da einen Denkfehler? Sobald ich den Beitrag aufrufe wird auch die single.php aufgerufen. Aber nicht auf der Startseite, die template tags (the_author, the_date..) werden hier nicht angezeigt.


Genau. Also WordPress braucht um zu funktionieren im Prinzip nur zwei Dateien, die index.php und die style.css – wenn du in deinem Template-Ordner lediglich diese beiden Dateien hast, dann werden auch nur diese beiden verwendet für alle Seiten deines Blogs (index, artikel, seiten, kategorien).

Nun kannst du aber hingehen und für Artikel (posts) ein spezielles Layout festlegen, dafür ist die single.php da. Diese Seite hier, auf der du dich gerade befindest, erhält durch die Datei "single.php" ihr Aussehen. Schaue dir dazu auch nochmal die Template-Hierarchie von WordPress an.

Es macht am meisten Sinn Kommentare auf den Artikel-Seiten anzuzeigen, deshalb kommt der Code für das Kommentarformular, bzw. der Aufruf der Datei, in die single.php.

Die Indexseite soll eigentlich nur eine chronologische Auflistung der Artikel-Titel sein mit einem kurzen Auszug aus dem Artikel.


Hallo, vielen Dank für das Tutorial. Ich verstehe nur eine Sache nicht, wenn ich mein WordPress-Blog lade, wird stets nur die index.php angezeigt, die single.php wird nie aufgerufen, obwohl ich sie genauso angelegt habe, wie beschrieben. Was kann ich tun?
Beste Grüsse aus der Schweiz!


Ist der Dateinamen kleingeschrieben?
Bist du sicher, dass du einen einzelnen Beitrag anschaust (da wird die single.php verwendet) oder eine Seite (page.php)?

Wird ein Fehler ausgegeben?
Unterscheidet sich die index.php von der single.php (woran weißt du, dass die single.php nicht aufgerufen wird).


Hallo, Chris,

super Ding, dein Tutorial, ich bin schon ganz schön weit, aber – auch bei mir reagieren single.php und comment.php nicht:
Beweis:
Bei der index.php habe ich die Zeile gelöscht:
<?php the_author(); ?> |
bei der single.php ist die Zeile enthalten. Der Autor wird nicht angezeigt, also greift wordpress nicht auf die single.php zu.

Die comment.php wird nicht verwendet, weil kein Kontaktformular erscheint.

Hat sich evtl. mit einem update etwas geändert?

Grüße
Wolfgang


nur um das mal zu klären:
Hier schreiben ein paar Leute "Warum ändert sich nichts wenn ich die single.php mit den korrigierten Daten erstellt habe". Es sollte in der Doku vielleicht etwas genauer erklärt werden, dass man auf einen einzelnen Post (in diesem Falle "Hallo Welt") klicken muss. Man erwartet im Moment, dass wenn die Startseite neu geladen wird, unter jedem Artikel der Autor, das Datum und die Kategorie steht.

Kommentar schreiben

Kommentar

Hilfe:

<strong>fettgedruckt</strong> => fettgedruckt

<em>kursiv</em> => kursiv

<a href="http://wordpress.lernenhoch2.de">Link</a> => Link

[code]<?php echo 'hello world'; ?>[/code]

*

Feedback Formular