Startseite und Blogseite in der Navigation anzeigen
Mich fragte vor ein paar Tagen ein sehr netter Kollege, wie man den “Blogbereich” in eine Navigation zwischen statischen Seiten integriert. Da ich ja auch ein netter Kollege bin, hab ich ihm natürlich geholfen.
Damit nun in Deutschland wieder Wettbewerbsgleichheit herrscht, verrate ich es euch allen.
Stellen wir uns vor, wir sollen einer Firma eine Webseite mit WordPress bauen. Er möchte ein System, was ihn in die Lage versetzt, selbst Inhalte zu erstellen bzw. zu verändern. Weiterhin möchte er Neuigkeiten aus seiner Branche und besondere Angebote auf einer News-Seite gesondert darstellen und pflegen. Der Newsbereich ist also eigentlich der Blog. Die Seitenstruktur halten wir für dieses Beispiel einfach:
- Home
- News
- Leistungen
- Kontakt
- Impressum
Wie bekommen wir das nun hin? Die Punkte Leistungen, Kontakt und Impressum werden als statische Seiten realisiert. Also im Adminbereich auf Schreiben->Seite schreiben gehen und diese Seiten als Hauptseiten anlegen. Unter Reihenfolge kann man die Reihenfolge der Seiten in der Navigation festlegen.
Für die Topnavigation notieren wir im Quelltext:
<ul>
<?php wp_list_pages('depth=1&title_li=0&sort_colunm=menu_order'); ?>
</ul>
und sehen die Menüpunkte Leistungen, Kontakt und Impressum. depth=1 bedeutet, dass wir uns nur auf die Hauptseiten beschränken, title_li=0 bedeutet, dass eine Liste ohne Überschrift ausgegeben werden soll und sort_colunm=menu_order sortiert nach der Reihenfolge, wie sie beim Schreiben der Seiten eingestellt worden ist.
Jetzt fehlt eine Startseite. Wir schreiben eine neue Seite mit dem Seitentitel Home und lassen den Inhalt leer. Wenn wir die Startseite nun anklicken, sehen wir die Überschrift Home, eventuell noch Datum und Autor, je nachdem, wie unsere page.php aufgebaut ist. Das wollen wir natürlich nicht. Wir legen eine neue Datei in unserem Theme an und nennen sie startseite.php (der Name ist egal, nur keine Namen verwenden, die WordPress verwendet.). Ganz an den Anfang der Datei kommt folgender Code:
<?php
/*
Template Name: Startseite
*/
?>
WordPress erkennt an diesem Code, das es sich um ein spezielles Template handelt und stellt es beim Schreiben einer Seite unter Seiten-Template zur Verfügung. Dieses Template können wir nach unseren Anforderungen gestalten. Wir können die letzten News listen, normalen statischen HTML-Code verwenden, irgendwelche WordPress-Funktionen, was immer wir wollen.
Jetzt müssen wir lediglich die Seite Home noch einmal in den Editor laden und als Seiten-Template Startseite auswählen und speichern.

Damit die Home auch wirklich die Startseite ist, müssen wir unter Einstellungen->Lesen die Seite Home als Startseite festlegen.

Jetzt haben wir eine schöne Startseite, aber der Blogbereich, den wir als News nutzen wollen, ist weg. Wie können wir den aufrufen? Ganz einfach. Wir legen eine neue Datei an, nennen sie news.php und kopieren folgenden Code hinein:
<?php
/*
Template Name: News
*/
load_template( TEMPLATEPATH . '/index.php' );
?>
Dieses Template ist nichts weiter als eine Dummyseite, welche die index.php läd, nur das wir die Dummyseite “greifen” können.
Jetzt schreiben wir eine neue Seite, nennen sie in der Überschrift News, lassen den Inhalt leer und wählen bei Seiten-Template News und veröffentlichen die Seite. Danach gehen wir noch einmal in Einstellungen->Lesen und wählen bei Beitragsseite News aus.

Wir können jetzt noch in Einstellungen->Permalinks auf benutzerdefiniert klicken und ein /news vor /%year%/%monthnum%/%day%/%postname%/ setzten. Damit stehen die Newsbeiträge optisch unter der URL domain.de/news/ .
Damit haben wir alle Anforderungen erfüllt und unser Kunde kann nun seine Seiten mit Inhalten versehen. Er freut sich bestimmt wie ein Schneekönig, das er kein Geld für das Ändern von HTML Seiten ausgeben muß. Was der Gute jedoch noch nicht weiß… wir werden ihm alle 3 Monate eine Rechnung für ein WordPress-Update schreiben
.
Noch ein Tipp. Man weiß ja manchmal nie, an was die Kunden überall so rumschrauben, löschen und umbenennen. Um herauszufinden, welcher Art die “Frontpage” oder die “Blogpage” ist, ohne händisch eine ID einzutragen, kann man folgendes verwenden:
- get_option(‘show_on_front’) zeigt an , ob die Frontpage vom Typ page oder post ist
- get_option(‘page_on_front’) liefert die ID der page, falls eine statische Seite die Frontpage ist.
- get_option(‘page_for_posts’) liefert die ID der page, die die Artikel ausgibt.
Im Code sieht das dann ungefähr so aus:
<?php
if('page' == get_option('show_on_front')){
$listpageotions = '&exclude=' . get_option('page_on_front').'';
} elseif ('posts' == get_option('show_on_front')) {
$listpageotions = '&exclude=' . get_option('page_for_posts').'';
} else {
$listpageotions = '';
}
<ul>
<li>"><a href="<?php bloginfo('url')?>/">Startseite</a></li>
<?php wp_list_pages('depth=1&title_li=0&sort_column=menu_order'.$listpageotions); ?>
</ul>
?>
Damit haben wir die Startseite, egal welche es ist, aus wp_list_pages ausgeschlossen, ohne eine ID zu kennen und können mit bloginfo(‘url’) die Startseite manuell notieren.
- Kategorie: Tutorials, WordPress
- Tags: cms, tutorial, WordPress
- Kommentar-Feed | Trackback URL
- Gelesen: 6046 | Heute: 3
- einen Kommentar schreiben
2 Kommentare


Was ich noch nicht verstehe.. wenn ich jetzt einen Eintrag aus den News wähle wird er ja über die single.php dargestellt.. aber dann ist in der Navigation “News” nicht mehr gehighlited (was ein Wort).
Lässt sich das noch irgendwie ändern?
Wenn du das willst, mußt du die “News” auch aus wp_list_pages ausschließen und manuell notieren.
if (stripos($_SERVER['REQUEST_URI'], news) !== false) {$css = 'current_page_item';
} else {
$css = 'page_item';
}
und in die Navi Liste:
<li class="<?php echo $css; ?>"><a href="<?php bloginfo('url')?>/news/" title="News">News</a></li>Das geht aber nur, wenn du permalinks hast.