Letzter Beitrag als Startseite

Ab WordPress Version 2.1 kann man eine Statische Seite als Startseite festlegen. Mit einem kleinen Trick geht das auch für den aktuellen Beitrag. Als Beispiel will ich hier die Vorgehensweise für das „Standard DE Theme“, so wie es leicht modifiziert auch hier verwendet wird, beschreiben.

Zunächst wird eine Kopie der Datei ’single.php‘ erstellt und z.B. ’start_page.php‘ genannt. In diese wird ganz oben, noch vor „<?php get_header(); ?>“ Folgender Quelltext eingefügt:

<?php
/*
Template Name: Startseite
*/
?>

Damit haben wir diese Seite zum Seiten-Template ernannt.
Nun sind noch einige, weitere Änderungen erforderlich. Damit auf der Startseite auch die Sidebar ordentlich dargestellt werden kann, ändern wir gleich nach dem „<?php get_header(); ?>“ das

<div id="content" class="widecolumn">

in

<div id="content" class="narrowcolumn">

und fügen direkt danach noch folgendes ein:

<?php
  query_posts('showposts=1');
?>

Falls wir den in der erstellten Startseite enthaltenen Text z.B. als Willkommenstext ausgeben wollen, kann dazwischen noch folgendes eingefügt werden:

<div class="post" id="willkommen">
	<div class="entry">
		<?php the_post(); the_content(''); rewind_posts(); ?>
	</div>
</div>

Über die ID „willkommen“ kann dann dieser Text in der style.css noch individuell formatiert werden. Der Klassenname des inneren DIV sollte dem bei den normalen Beiträgen entsprechen. So hat man schonmal eine brauchbare Grundformatierung.

Somit sieht sieht der Anfang unserer ’start_page.php‘ dann etwa so aus:

<?php
/*
Template Name: Startseite
*/
?>
<?php get_header(); ?>

	<div id="content" class="narrowcolumn">
		<div class="post" id="willkommen">
			<div class="entry">
				<?php the_post(); the_content(''); rewind_posts(); ?>
			</div>
		</div>
				
<?php
  query_posts('showposts=1');
?>	
  <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
	
		<div class="navigation">

Damit die Sidebar auch tatsächlich angezeigt wird, müssen wir den entsprechenden Code get_sidebar() fast ganz am Ende direkt vor get_footer() einfügen. Das sieht dann etwas so aus:

<?php get_sidebar(); ?>

<?php get_footer(); ?>

Nun die Datei speichern und in des Theme-Verzeichnis auf dem Server übertragen.

Jetzt erstellen wir über ‚Schreiben‘->’Seite schreiben‘ eine neue statische Seite. Der geben wir als Titel zum Beispiel „Start“. Der Inhalt darf leer bleiben, den bekomen wir eh nie zu sehen, dafür soll ja der letzte Artikel angezeigt werden kann z.B. einen Willkommenstext enthalten, der vor dem eigentlichen Artikel ausgegeben wird. Wichtig ist, das wir rechts unter ‚Template der Seite‘ das gerade erstellte Template „Start“ auswählen. Nun kann die Seite gespeichert werden und wir wechseln in den Einstellungen-Bereich.

Unter ‚Einstellungen‘->’Lesen‘ klicken wir bei ‚Startseite‘ für ‚Anzeige‘ die Option

(•) Eine statische Seite (unten auswählen)

an und wählen die Seite „Start“ als Startseite aus:

Startseite: [Start     [▼]]

Nun die [Einstellungen aktualisieren] und falls ich nichts vergessen hab, ist der aktuelle Beitrag nun die Startseite

Mal gucken, ob es geklappt hat…

Nachtrag: Ja, scheint zu funktionieren :-) Große Freude!

Stichwörter: , ,

Reaktionen zu “Letzter Beitrag als Startseite” (35)

  1. Da hast du dir aber Mühe gegeben, sehr gut erklärt!

  2. Jo, das habe sogar ich hinbekommen. Super!!

  3. Sehr hilfreicher Artikel, der mir sehr weitergeholfen hat!

    Nun muss ich nur noch daran arbeiten, dass unter dem statischen Einleitungstext nicht nur der letzte Beitrag sondern die letzten drei Beiträge und nach Möglichkeit nur die Kurzform davon angezeigt werden.
    Tipps und Hinweise, die mir das Herumbasteln ersparen oder zumindest erlеiсhtern sind mir sehr willkommen!

  4. Ich habe meine Beschreibung oben überarbeitet. Besser ist die Funktion query_posts(’showposts=1′) anstelle von $posts = get_posts(“). Und da kann man dann auch mit dem Parameter showposts=3 z.B. die letzten drei Beiträge anzeigen lassen.
    Um nur die Kurzform anzuzeigen muß the_content durch the_excerpt ersetzt werden.

  5. Toller Beitrag.
    Leider schaffe ich es nicht, dass das Kommentarfeld angezeigt wird. Tipps?

  6. Einfach nach dem query_posts(’showposts=1′) in der nächsten Zeile $withcomments = true; einfügen und nach der Ausgabe dann natürlich noch comments_template(); aufrufen.

  7. […] 6: Dank der Hilfe von Schnurpselchen und seinem Beitrag Letzter Beitrag als Startseite in WordPress bekommt man nun auch glеiсh die Kommentare angezeigt. Jetzt muss ich noch die Links […]

  8. Ich sehe bei mir unter „Unter ‘Einstellungen’->’Lesen’ “ nirgendwo weder

    die ‘Startseite’ für ‘Anzeige’
    noch die Option (•) Eine statische Seite (unten auswählen)
    noch Startseite: [Start [▼]]

    Fehlt mir eine Plugin?

    Linksaussen

  9. Nein, es fehlt kein Plugin, ab WordPress Version 2.1 ist die Option standardmäßig vorhanden. Sie wird allerdings nur angezeigt, wenn überhaupt schon mindestens eine statische Seite existiert.

  10. Ja, sorry.
    Das Problem lag bei mir und hat sich erledigt.
    Ich hatte die Seite lediglich abgespeichert, nicht veröffentlicht.

  11. header.php

    Sieht alles gut beschrieben und einfach aus – bei mir tut’s allerdings nicht.
    Ich möchte auf einer statischen ersten Seite, unter einem statischen Begrüßungstext, die letzten 3 Beiträge (oder auch nur deren Titel oder Anfäge) ausgeben – hab’s aber nach der Beschreibung nicht hinbekommen.
    Es beginnt schon damit, dass bei mir (WP2.3) die Datei „single.php“ anders aussieht (hier das Original):
    ——————————

    <?php get_header(); ?>
    
    	<div class="left">
    
    	<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    
    		
    
    		<div class="post" id="post-<?php the_ID(); ?>">
    			<h2><a href="<?php echo get_permalink() ? rel="nofollow">" rel="bookmark" title="Permanenter Link: <?php the_title(); ?>"><?php the_title(); ?></a></h2>
    
    			<div class="entry">
    				<?php the_content('<p class="serif">weiter lesen »</p>'); ?>
    
    				<?php wp_link_pages(array('before' => '<p><strong>Seiten:</strong> ', 'after' => '</p>', 'next_or_number' => 'number')); ?>
    
    				<p class="postmetadata">
    					<small>
    
    						<?php edit_post_link('Eintrag bearbeiten','',''); ?>
    
    					</small>
    				</p>
    
    			</div>
    		</div>
    <div class="navigation">
    			<div class="alignleft"><?php previous_post_link('« %link') ?></div>
    			<div class="alignright"><?php next_post_link('%link »') ?></div>
    		</div>
    	<?php comments_template(); ?>
    
    	<?php endwhile; else: ?>
    
    		<p>Leider keine weiteren Einträge.</p>
    
    <?php endif; ?>
    
    	</div>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    ——————————

    Lange habe ich darin gefummelt: als firstpage.php umbenannt, zum Template gemacht, Template zugewiesen, Ballast (Edit this entry, Comments) entfernt. Funktioniert alles. Dann den Code reinkopiert, den ich als zuständig für die Ausgabe der neuesten Beiträge gehalten habe – funktioniert einfach nicht …

  12. header.php

    ähem – wie kann ich hier Code posten? Der, den ich gerade posten wollte, ist nämlich nun wirklich nicht der, der erschienen ist

  13. Ich habe mal Deinen Code rekonstruiert, eine direkte Eingabe im Kommentar ist erstmal nicht vorgesehen.

    Es müßte reichen, wenn Du einfach zwischen <div class=“left“> und <?php if (have_posts()) : while (have_posts())…, also in der vierten Zeile den Code für das Ausgeben des Begrüßungstextes und das Neustarten der Abfrage einfügst, z.B. so:

    <?php get_header(); ?>
    
    	<div class="left">
    		<div class="post" id="willkommen">
    			<div class="entry">
    				<?php the_post(); the_content(''); ?>
    			</div>
    		</div>
    
    <?php query_posts('showposts=3'); ?>
    
    	<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
    ...
  14. header.php

    Was soll ich sagen: funktioniert! Danke!

  15. header.php

    … und wenn ich jetzt nur die Überschriften statt der Beiträge ausgeben will?

  16. Dann läßt Du einfach alles sowas wie the_content(…) und Ähnliches weg, also der ganze div-Container mit class=“entry“. Praktisch bleibt dann nur das in der Zeile mit h2 get_permalink(…) usw. stehen, auch „navigation“ und comments_template() können dann raus.

  17. header.php

    Danke für Deine Geduld! Hab viel gelernt die letzten Tage …

  18. […] habe ich eine statische Startseite nach dieser Anleitung gebastelt. Jetzt mußte ich nur noch dafür sorgen, das auch das Kommentareingabefeld angezeigt […]

  19. Hallo, erstmal großes Lob für deine hilfreichen Tipps zu Word Press. Leider haben Sie mir nur nicht geholfen! Da ich ein absoluter newbie in php bin!!
    Meine Startseite mit dem Titel Home zeigt den Inhalt der nä. Seite an (study@paradise)!! Dies ist gewollt nur soll der Link Home verschwinden und dafür eben der nächste Link „study@paradise“ den Link auf die startseite darstellen!!
    Ist das irgwie möglich???
    Schön wäre es auch noch wenn unter dem Wilkommen Text die letzten 3 Kategorien erscheinen würden!!

    Ich weiß ich stelle mich wirklich dumm an!!
    Ich habe die oberen beiträge schon gelesen… suche single.php
    usw…
    müsste ich in mienem Fall auch so vorgehen???

    danke für die Hilfe

    Ben

  20. Super Anleitung, hab das getestet, funktioniert auch mit den Beiträgen, hab nur ein problem
    –> mein Willkommenstext den ich in der neuen Seite reingeschrieben habe wird leider nicht angezeigt???? nur die neuesten beiträge, aber die seite mit der ich das template verbunden habe, wird der inhalt nicht mehr angezeigt. woran kann das liegen???

  21. Bevor die Ausgabe der aktuellen Beiträge mit

    query_posts('showposts=3');

    startet, wird ja darüber der Inhalt der Seite ganz normal mit

    <div class="entry">
     <?php the_post(); the_content(''); ?>
    </div>

    ausgegeben, in etwas so wie in meinem Kommentar weiter oben.
    Das sollte eigentlich funktionieren.

  22. Vielen Dank hat perfekt geklappt!!!!!!!! juhuuuuu…… nur noch eines, der content (Einleitungssatz) is jetzt da und darunter die letzten posts, jedoch rutscht mein Einleitungstext ganz nach oben, also kurz vor den banner. Wie kann ich in ein stück runter versetzen???? sodas er nicht mehr ganz oben klebt.

    thx…….und vielen Dank für die Hilfe
    kann leider keinen link schicken, da die webseite lokal bei mir läuft

  23. habs hinbekommen….danke!!

  24. muss nochma was nachfragen…lol
    stimmt jetzt alles nur ein problemchen der Beitragstitel rutsch nun ein stück zuviel unter der Einleitungstext, möchte gerne den Beitragstitel etwas hochrutschen, findes das nur nicht in der css datei, verwende das default theme.

  25. noch ein problem, der beitrag wird immer komplett angezeigt auf der starseite, kann man das nicht so machen, das es nur eine vorschau gibt?

  26. habe das auch gelesen mit the_excerpt aber dann zeigt er mir den einleitungstext in kurzform an, und nicht die beiträge, möchte das ja nur bei den beiträgen haben, werd bald wahnsinnig…lol

  27. soo hab das hinbekommen, zeigt die kurzform von den beiträgen an, jedoch hab ich gedacht man klickt dann auf […] und man kann den rest lesen, jedoch funzt das net. Weiss jemand Rat???

  28. Hallo Jan,
    für viele Dinge bezüglich WordPress bietet das WP-Deutschland-Forum sehr gute Hilfe.
    Nimm es mir bitte nicht übel, aber ich kann hier kein WordPress-Einsteigerseminar abhalten :-)

  29. Thorsten Albrecht

    Hallo,

    zum Problem vom letzten Kommentator:

    Das ist keine Frage für ein Einsteigerseminiar, sondern scheint ein Problem zu sein, welches mit Deiner beschriebenen Methode zusammenhängt.

    Die Funktion the_content() verhält sich anders, wenn man Deine Methode anwendet, d.h. sie kürzt nicht den Text wie gewohnt.

    Allerdings hat ein Aufruf von the_content(‚more-Text‘, true, ‚test‘);
    durchaus die Wirkung, dass der Text gekürzt wird – es wird jedoch kein Text („more-Text“) und kein Link angzeigt.

    Hast Du evtl. eine Idee für eine Lösung?

    Danke im Voraus!

  30. Thorsten Albrecht

    Ergänzung + Lösung (nach längerer Recherche):

    Damit das more-Tag wie erwartet funktioniert, muß direkt vor der zweiten Loop die Variable $more = 0; wieder auf Null gesetzt werden; ansonsten werden More-Tags in der zweiten Loop ignoriert.

    Der Code vom Willkommentext muß daher folgendermaßen geändert werden:

    Gruß, Thorsten

  31. Ja stimmt, das mit dem $more habe ich so einfach ignoriert. Da die Startseite ja eine statische Seite ist, wird per Voreinstellung $more auf true gesetzt und damit das „Weiterlesen“ deaktiviert.
    Das Problem hatte ich hier kürzlich selber, als ich einen langen Artikel auf der Startseite kürzen wollte und es einfach nicht funktioniert hat. Bis ich dann eben auf die globale Varaiable $more gestoßen bin. Dies muß auf false gesetzt werden.

    Danke für den Hinweis!

  32. Super Beitrag! :) Hab ihn für meine Seite gebraucht, wollte in der Kategorieansicht 10 Artikel (Excerpts) und auf der Titelseite nur 2 Artikel, dank deines php skripts kein Problem :) Mfg Christian

  33. Wunderbares Tutorial. Einfach und wirkungsvoll.
    Zeigt, wie idividuell gestaltbar WordPress ist und wie blickig Schnurpselchen.
    Danke und Cheers
    Jan

  34. Sehr guter Beitrag. Ist zwar schon etwas älter, funktioniert aber noch immer ;) Danke!

  35. […] Seitentemplate geschrieben und in dem anderen Theme den Inhalt von home.php in das Seitentemplate + diesem Zusatz. Daraufhin musst ich die Navigationsleiste oben selbst noch verlinken und fertig. Wenn man weiß […]

Einen Kommentar schreiben




 Hier kein Häkchen setzen
 Ich bin kein Spambot

Hinweis: Kommentare von bisher unbekannten Schreibern (Name und eMail) oder mit mehr als einem Link werden moderiert.