Peruns Weblog - Webwork und Internet


Weblog der perun.net webwork gmbh mit Artikeln zum Thema WordPress, Webwork, und Internet. Ältere Artikel findest du im Archiv.



WordPress: Inhalte auf der Startseite steuern

Perun am 10. April 2010 um 16:38 Uhr

Eine sehr häufige Frage, die ich in den Workshops und E-Mails lese, ist die Frage nach dem wie man die Startseite in WordPress so beeinflussen kann, dass sie sich von den anderen Übersichtsseiten unterscheidet.

Um so etwas zu realisieren, gibt es in WordPress mehrere Lösungswege. Ich werde in diesem Artikel ein paar Möglichkeiten vorstellen und natürlich erhebe ich keinen Anspruch auf Vollständigkeit.

Die Conditional Tags

WordPress beherrscht eine Reihe von Conditional Tags. Diese sind in der Lage bestimmte Zustände und Bedingungen abzufragen, zum Beispiel "bin ich in einer Kategorie-Übersicht?" (is_category()).

Will man jetzt auf der Startseite einen Inhalt unterbringen, der z. B. in einem Archiv (Monatsarchiv, Kategorie-Übersicht) nicht vorkommen soll, dann könnte man in der index.php vor dem Loop folgendes unterbringen:

<?php if (is_home()) { ?>
    <div class="info-box">...</div>
<?php } ?>

Du könntest dich dem Problem natürlich auch von der anderen Seite nähern. Nehmen wir mal an, du möchtest bei der Ausgabe des Jahres-Archivs eine kleine Abweichung haben, dann einfach folgenden Code vor dem Loop unterbringen.

<?php if (is_year()) { ?>
    <div class="info-box">...</div>
<?php } ?>

Bei der Abfrage der Startseite bitte auch folgenden Artikel beachten: WordPress: bin ich auf der Startseite?

Verschiedene Template-Dateien

Um sich nicht in den diversen Conditional Tags zu verheddern hat man auch die Möglichkeit, für verschiedene Zustände einer Website auch entsprechende Template-Dateien zu erstellen.

Neben dem Haupttemplate (index.php) kann man noch die page.php für Seiten, single.php für die Ansicht eines einzelnen Artikels, category.php für das Kategorie-Archiv etc. erstellen. Das geht so weit, dass man auch für einzelne Kategorien extra Templatedateien erstellen kann: category-wordpress.php wäre zuständig für die Kategorie mit dem Namen "WordPress". Weitere Infos dazu gibt es in der offiziellen Dokumentation.

Plugins

Neben den mittlerweile 9.100 Plugins im offiziellen Verzeichnis, existieren auch mehrere Erweiterungen, deren Aufgabe es ist Kategorien bzw. Artikel bestimmter Kategorien von der Startseite ausblenden. Die Suche nach "exclude categories" (dt. Kategorien ausschließen) liefert mir 176 Ergebnisse, wobei nicht alle Plugins in das Ergebnis passen.

Wie sehr oft bei WordPress ist auch hier die Qual nicht ob es eine Lösung für etwas gibt, sondern welche der vielen Lösungen die richtige ist. Wer aus dieser Liste einen Plugin empfehlen kann immer her damit.

Sauereien im Loop

Man kann aber bei der Lösung der Fragestellung auch selber die Hand anlegen und den Loop manipulieren.

Hier eine konkrete Anforderung aus der Praxis. Bei einem Auftrag sollten auf der Startseite je drei Artikel aus drei verschiedenen Kategorien in separaten Blöcken aufgelistet werden. So schaut dann die Lösung aus, die ich eingesetzt habe:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
<?php if (in_category('1') && is_home()) continue; ?>
<?php if (in_category('2') && is_home()) continue; ?>
<?php if (in_category('3') && is_home()) continue; ?>
<?php endwhile; ?>
<?php else : ?>
<p>Es existieren keine Einräge zu diesem Thema.</p>
<?php endif; ?>

<h3>News</h3>

<?php query_posts('cat=1&showposts=3');
$posts = get_posts('category=1&numberposts=3&offset=0');
foreach ($posts as $post) : start_wp(); ?>
    <div class="auszug">...</div>
<?php endforeach; ?>

<h3>Pressemitteilungen</h3>

<?php query_posts('cat=2&showposts=3');
$posts = get_posts('category=2&numberposts=3&offset=0');
foreach ($posts as $post) : start_wp(); ?>
    <div class="auszug">...</div>
<?php endforeach; ?>

<h3>Veranstaltungen</h3>

<?php query_posts('cat=3&showposts=3');
$posts = get_posts('category=3&numberposts=3&offset=0');
foreach ($posts as $post) : start_wp(); ?>
    <div class="auszug">...</div>
<?php endforeach; ?>

Damit das ganze übersichtlich bleibt, habe ich das Code-Beispiel auf das nötigste reduziert.

In dem ersten Abschnitt fängt der Loop wie gewohnt an: if ( have_posts() ) : while ( have_posts() ) : the_post();. Aber schon in der zweiten Zeile gibt es Abweichung. Mit in_category() fragt man ob sich ein bestimmter Artikel in einer Kategorie befindet, wenn ja, dann wird die Ausführung des Codes fortgesetzt.

In Zusammenspiel mit den Template-Tags query_posts und get_posts() holt man sich dann je drei Artikel aus der entsprechenden Kategorie. Selbstverständlich muss man die Kategorie-IDs noch anpassen. :-)

Ich habe die Lösung an meine Bedürfnisse angepasst, aber wo ich den originalen Code gefunden habe kann ich beim besten Willen nicht mehr nachvollziehen.

Diesen Artikel weiterempfehlen:
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • FriendFeed
  • LinkArena
  • MisterWong.DE
  • Webnews.de
  • Yigg
  • Technorati
  • Twitter
  • Wikio DE

Eigenwerbung: unsere Bücher (WordPress und Webwork-Tools)

Verwandte Beiträge

 — 


10 Kommentare »»

  1. 1.Markus

    Kommentar vom 10. April 2010 um 16:48

    Da geht noch mehr zu reduzieren:

    if in_category( array( 1,2,3 ) ) && is_home()) continue;

    Wobei ich das mit dem continue und wp_start bisher nicht kenne? Sollte aber trotzdem gehen oder?

  2. 2.Michael

    Kommentar vom 11. April 2010 um 09:54

    Mich überrascht eigentlich, dass das nicht viel häufiger eingesetzt wird. Prinzipiell kann man ein WordPress Template aus nur einer Datei (plus einer für die Kommentare und natürlich eine für CSS :) basteln.

    Der Code wird zwar weniger übersichtlich, aber Änderungen muss man nicht mehr an einer Handvoll Dateien vornehmen.

  3. 3.Markus

    Kommentar vom 11. April 2010 um 13:03

    @Michael Prinzipiell geb ich Dir recht, aber ich denke das geht nur bis zu einer gewissen größe der Website. Desweiteren hat man ja einige Abfragen schon im Core von WP und ich denke die sollte man dann auch nutzen. Gemeinsame Sachen, kann man in eigene Funktionen auslagern, so muss man diese auch nur an einer Stelle ändern. Ein guter Mitelweg ist in meinen Augen das beste. Zuviele IF Abfragen sind denke ich kontraproduktiv. Es sei den man arbeiten dann mit defines oder dergleichen.

  4. 4. – Thorsten Albrecht

    Kommentar vom 11. Mai 2010 um 16:21

    Als Plugin wäre zu empfehlen:
    Simply Exclude Plugin
    http://www.codehooligans.com/projects/wordpress/simply-exclude/
    Einfacher geht es nicht mehr.

    Thorsten

  5. 5. – Andre

    Kommentar vom 27. Mai 2010 um 20:16

    Liese sich das mit den "jeweils 3 Artikel aus einer Kategorie" auch mit Schlagwörtern machen und wenn ja, wie würde dann der Code aussehen?

    Bin da grad verzweifelt am suchen :(

    Viele Grüße, André

  6. 6. – Sabine

    Kommentar vom 01. Juni 2010 um 11:47

    Hallo,

    diese Lösung gefällt mir sehr gut. Ich bin leider nicht fit genug in wordpress. Deshalb muss ich wissen, was ich im template hier (…) eingeben muss:

    Im Moment besteht mein Ergebnis im Frontend aus den Überschriften und danach 3 Zeilen mit "…" (logisch …) Habe schon mit dem Loop herumgemurkst, aber ich frage lieber den Fachmann.

    Willst/Darfs Du das verraten?

    Grüße
    Sabine

  7. 7. – Sabine

    Kommentar vom 01. Juni 2010 um 12:10

    Nochmal ich,

    ich habe eben herausgefunden, dass ich zumindest dies hier eingeben muss.

    Insofern hat sich meine letzte Frage erledigt.

    Aber es gibt eine neue Frage:
    Wie kann ich dafür sorgen, dass der Auszug nicht in voller Länge, sondern eben als Auszug ("Weiterlesen….") angezeigt wird. Das funkt bei mir nicht, obwohl ich in den Beiträgen den more-tag gesetzt habe.

    Danke und Grüße
    Sabine

    PS: Falls Du Dich wunderst, dass ich die Code-Tags nicht benutzt habe: In der live-Vorschau bleibt die Anzeige zwischen den Code-Tags bei mir leer, sobald ich etwas lösche und ändere.

  8. 8.Perun

    Kommentar vom 05. Juni 2010 um 14:52

    Hallo Sabine,

    der Auszug wird durch the_excerpt(); realisiert und dieser erlaubt keine Formatierungen, es wird nur purer Text ausgegeben. Möchtest du den Excerpt (Auszug) erweitern in dem du die Auslassungszeichen ([…]) ersetzt, dann hilft dir dieser Link weiter.

  9. 9. – Sabine

    Kommentar vom 07. Juni 2010 um 14:15

    Vielen Dank für den Link.

    Das war nicht genau das, was ich suchte.
    Aber ich hab es dafür hier gefunden …

    Vielleicht hiflt das dem einen oder anderen weiter.

    Grüße
    Sabine

  10. 10.3 Blogs zum Sonntag KW 24 » Blog, Leseempfehlungen, Pixeldreher, Blogs, Vorstellung, PingPod, WordPress, Initiative » wpLove.de

    Pingback vom 20. Juni 2010 um 10:58

    [...] sind immer wieder äußerst spannende Artikel dabei, etwa (die etwas ältere) Anleitung, wie man Inhalte auf der Startseite steuern kann. Gesamtfazit: Immer wieder [...]

Einen Kommentar hinterlassen

XHTML (folgende Tags sind erlaubt): <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> . Kommentar-Vorschau ist aktiviert (Javascript wird benötigt).

Code-Beispiele: damit die Code-Beispiele richtig angezeigt werden müssen die Sonderzeichen maskiert werden (z. B. < zu &lt;).

Live-Vorschau