Frei konfigurierbare Menüs in ältere WordPress Themes einbinden

Kategorie: PHP 9 Kommentare,


Seit WordPress 3.0 ist es möglich Navigationsmenüs der eigene Seite über den Admin-Bereich zu steuern und so nicht nur Seiten (Pages) anzuzeigen, sondern auch frei wählbare Kategorien, Posts und Links. Dabei sind mehrere Ebenen möglich, welche in Form eines Dropdown Menüs dargestellt werden.

Ältere Themes bzw. eigene Entwicklungen

In den meisten neueren Themes ist die frei konfigurierbare Menüführung bereits eingebunden. Allerdings hat mich der SiskoBLN gefragt, wie man dieses in einem älteren Theme aktivieren kann. Folgende Schritte sind hierfür nötig:

Voraussetzungen

  • WordPress ab Version 3.0
  • Zugriff auf die Theme-Dateien unter /wp-content/themes/[theme-name]

functions.php

Sollte sich im Theme Verzeichnis noch keine functions.php befinden, dann kann diese einfach als neue Datei hinzugefügt werden. Am Anfang der functions.php muss ein <?php stehen.

Folgenden Sourcecode hinzufügen:
[php]
register_nav_menus( array(
‚primary‘ => ‚Primary Navigation‘
) );
[/php]
Hiermit wird in WordPress definiert, dass es ein zu verwaltendes Menü im Theme gibt. Wenn du mehr als ein Menü benutzen möchtest, um zum Beispiel im Footer eine Liste mit weitern Seiten und Links einzubinden, dann erweiter das Array einfach um einen Eintrag:
[php]
register_nav_menus( array(
‚primary‘ => ‚Primary Navigation‘,
’secondary‘ => ‚Secondary Navigation‘
) );
[/php]

header.php

In dem meisten Fällen wird sich das zentrale Navigationsmenü innerhalb der header.php befinden. Ansonsten bitte die entsprechende Datei öffnen, an dessen Ort ihr euer neues Menü einbinden möchtet.
[php]
<div id="access" role="navigation">
<?php wp_nav_menu( array(
‚container_class‘ => ‚menu-header‘,
‚theme_location‘ => ‚primary‘
) ); ?>
</div>
[/php]
Mit container_class gibt man die CSS Klasse an, welche für das Menü verwendet werden soll und theme_location ist das entsprechende Admin-Menü, welches in der functions.php definiert wurde (primary, secondary, usw.). Ein evtl. vorhandenes altes Navigationsmenü bzw. den wp_page_menu() Aufruf bitte entfernen oder auskommentieren.

Weitere Informationen und alle nutzbaren Parameter gibt es auf der wp_nav_menu Codex Seite.

style.css


Das Menü braucht natürlich auch einen CSS Style. Als Beispiel ein rotes Menu mit weißer Schrift mit Dropdown Möglichkeit (ninjalooter.de), welches aus dem WordPress Standard-Theme abgeleitet ist:
[css]
#access {
height: 23px;
background: #741d1d url(‚images/red-navibackground.gif‘) repeat-x;
border-top: 1px #fff solid;
border-bottom: 1px #fff solid;
color: #fff;
font-size: 14px;
}
#access .menu-header,
div.menu {
font-size: 14px;
margin-left: 12px;
}
#access .menu-header ul,
div.menu ul {
list-style: none;
margin: 0;
}
#access .menu-header li,
div.menu li {
float:left;
position: relative;
}
#access a {
display:block;
text-decoration:none;
color:#fff;
padding:0 10px;
line-height:23px;
border-right: 1px solid #fff;
}
#access ul ul {
display:none;
position:absolute;
top:23px;
left:0;
float:left;
box-shadow: 0px 3px 3px rgba(0,0,0,0.2);
-moz-box-shadow: 0px 3px 3px rgba(0,0,0,0.2);
-webkit-box-shadow: 0px 3px 3px rgba(0,0,0,0.2);
width: 180px;
z-index: 99999;
}
#access ul ul li {
min-width: 180px;
}
#access ul ul ul {
left:100%;
top:0;
}
#access ul ul a {
background:#741d1d;
height:auto;
line-height:1em;
padding:10px;
width: 160px;
border-right: none;
}
#access li:hover &gt; a,
#access ul ul :hover &gt; a {
color:#fff;
background:#533;
}
#access ul li:hover &gt; ul {
display:block;
}
#access ul li.current_page_item &gt; a,
#access ul li.current-menu-ancestor &gt; a,
#access ul li.current-menu-item &gt; a,
#access ul li.current-menu-parent &gt; a {
color: #fff;
}

* html #access ul li.current_page_item a,
* html #access ul li.current-menu-ancestor a,
* html #access ul li.current-menu-item a,
* html #access ul li.current-menu-parent a,
* html #access ul li a:hover {
color:#fff;
}
[/css]

Fazit

Mit drei Schritten und entsprechender Anpassung der style.css an das eigene Blog-Design kann man auch ein älteres bzw. eigenes WordPress Theme mit den frei konfigurierbaren Admin Menüs erweitern.

Bisher 9 Antworten zu “Frei konfigurierbare Menüs in ältere WordPress Themes einbinden”

  1. SiskoBLN says:

    Hmmm,
    das sollte mit der Erklärung sogar mit meinen quasi nicht vorhandenen PHP Kenntnissen zu schaffen sein.

    Danke für den Post. :-)

  2. Kirsten says:

    Super, vielen Dank – genau das, was ich gesucht hatte.

  3. Karsten says:

    @Kirsten: Gerne, ich hoffe ich konnte damit helfen.

  4. Sarah says:

    Ich bin nicht so in der PHP-Thematik und habe das nach der Anleitung versucht, bei mir erscheint zwar die Funktion des Menus im Backend, es wird aber nicht im Frontend übernommen. Ich arbeite mit einem WP-Theme, kann sich das mal jemand ansehen?

  5. Karsten says:

    Das kann ich mir gerne anschauen. Schicke mir bitte über das Kontaktformular die notwendigen Infos. Wenn es für die verlinkte GmbH Seite ist, dann berechne ich meinen Stundensatz von 65,- EUR netto.

  6. Andre says:

    Ah super! Habe schon seit zwei Tagen verzweifelt an einer zweiten Navigation gebastelt. Ohne Erfolg. Aber so hat innerhalb von 1 Stunde alles hingehaun. Super das so ein alter Beitrag noch gibt!

  7. anon says:

    Wie kann ich verhindern, dass die seiteneinträge automatisch hinzugefügt werden? ich muss diese garnicht im backend hinzufügen :/

    mfg, vielen dnak im voraus

  8. Karsten says:

    Hast du im WP-Admin unter Menu denn eine eigene Auflistung wie in der Beschreibung eingerichtet?
    So lange kein eigenes Menu vorhanden ist, nutzt WordPress als Alternative das automatisch erstellte.

  9. anon says:

    Vielen dank, ich hab es schon hinbekommen :) mithilfe von „Page Link Manager“ konnte ich es trotzdem ändern was angezeigt werden soll und was nicht. Danke für die schnelle Rückmeldung.

Kommentar verfassen