WordPress: Eigenes Menü für bestimmte Seiten

Ich bin ja immer noch dabei, mein “Portfolio” ein bisschen aufzuarbeiten, und dabei soll WordPress auch als CMS benutzt werden. Jetzt hätte ich gerne auf den Seiten, die ein bestimmtes Projekt beschreiben ein Menü, dass sich auf die Unterseiten dieser Seite beschränkt, und nur einen generelle Link zurück zu Blog hat. Auf dem Blog soll natürlich weiterhin das normale Menü angezeigt werden.

Die Lösung war eine Kombination aus der WP 3.0 Menü Funktion und einem kleinen PHP Hack. Zuerst ein Mal zu der Menü Funktion: Diese Funktion ist mit WordPress 3.0 verfügbar und ermöglicht es, unter Design/Menüs eigene Menüs zu erstellen. (Wenn das Theme das unterstützt) Nur was macht man damit? Zum einem kann das Menü einer Position im Theme zuweisen. Das ist praktisch, wenn man die automatische Menüanordnung nicht mag. Doch mit einem kleinem Eingriff wird das ganz noch mächtiger!

Alles was man machen muss, ist diese Zeilen in die funktions.php des Theme zu kopieren:

<?php
//Filter the arguments for the wp_nav_menu_function to include a custom menu on pages.
function nr_2010_wp_nav_menu_args($args = '')
{
	if(is_page()) //custom menus only on sites
	{
		global $post;
		$page_slug = sanitize_title($post->post_title);

		if(is_nav_menu('page-' . $page_slug)) //if a menu with the name page-{page url form} exists, use it.
		{
			$args['menu'] = 'page-' . $page_slug;
		}
	}
	return $args;
}
add_filter( 'wp_nav_menu_args', 'nr_2010_wp_nav_menu_args' );
?>

Kleine Erklärung: Es wird ein Filter auf die Parameter der wp_nav_menu gesetzt. In diesem Filter kann man die Parameter der Funktion ändern, bevor sie ausgeführt wird. (Alles Teil des genialen Plugin Systems von WordPress) Wenn grade eine Seite (is_page) angefragt wird, wird in der Variable post_slug die URL Form des Titels gespeichert und wenn auch ein Menu existiert (das wie oben beschrieben erstellt wurde), das den Name page-{post_slug} hat, wird dieses statt dem normalem Menü angezeigt.

Viel Text für eine einfache Erklärung: Ich kann einfach ein Menü mit einem passenden Namen erstellen, und es wird anstelle des normalen Menüs angezeigt! Super einfach ;)

Verbesserungsideen: Den Namen des Menüs aus einem Custom Filed des Posts leses…

Dieser Beitrag wurde unter mein Blog, PHP, Programmieren, Tipps & Tricks abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

44 Antworten auf WordPress: Eigenes Menü für bestimmte Seiten

  1. Mohammed Errouzi sagt:

    Ich bin beeindruckt! Bitte halte uns auf dem laufenden!

  2. Gerd sagt:

    Hallo,
    wenn ich den php Code in die function.php kopiere, kann ich nicht mehr in meinen admin Bereich einloggen. Die Ü, Ö und Ä zeigen auch nicht mehr an. Ich habe den php-Code in mein Kind-thmes / function.php kopiert. Über eine Antwort würde ich mir sehr freuen. Gruss Gerd

    • niklas sagt:

      Das ist seltsam. Ich hab dieses Script hier immer noch im Einsatz und es funktioniert wunderbar. Steht in deiner functions.php Mensch etwas anderes drin? Wenn ja, poste doch mal die komplette Datei, vielleicht hast du den Code an eine ungünstige Stelle kopiert…

      Welches Theme benutzt du denn? Möglicherweise unterstützt das Theme gar keine Customs Menüs?

  3. Seraina sagt:

    Hallöchen

    Ich brauche dringend deine Hilfe. Ich habe deine obigen Zeilen wie du beschreibst auf meiner Page eingefügt. Nun geht gar nichts mehr. Die Seite kann nicht mehr angezeigt werden. Kannst du mir bitte helfen meine Seite wiederherzustellen?

    Danke Gruss Seraina

    • niklas sagt:

      Hallo Seraina,

      Laut der Fehlermeldung gibt es einen Syntaxfehler in der functions.php. (Parse error: syntax error, unexpected ‘*’) Vermutlich hast du den Code an die falsche Stelle kopiert, und dadurch funktioniert er da nicht. Wenn man Pech hat, kann man sich so wirklich die ganze Seite lahm legen. :(

      Da du scheinbar auch keinen Zugriff mehr auf die Admin-Seiten hast, musst du leider per FTP auf den Server zugreifen, und dort die functions.php unter /wp-content/themes/(Name)/ wieder bearbeiten. Die Zugangsdaten für FTP hast du vermutlich bei der Installation von WordPress gebraucht, die hast du bestimmt irgendwo.

      Wenn du deinen Blog gerettet hast, poste doch hier mal die gesamte functions.php Datei, dann finden wir den Fehler bestimmt.

      • Seraina sagt:

        Hallo Niklas

        Ich danke dir vielmals. Jedoch bin ich die absolute Niete und meine Kollegin hat das für mich gemacht. Ich bin echt am verzweifeln. Ich weiss nicht, ob sie die Zugangsdaten noch hat… morgen gehe ich zu einem IT-Spezialisten. Meinst du, kann mir dieser helfen?

        Danke nochmals für die prompte Antwort.

        Gruss
        Seraina

        • niklas sagt:

          Wenn du die Zugansdaten noch hast, kannst du sie mir gerne per Mail schicken (steht im Impressum) dann kann ich mir das mal ansehen (wenn du das möchtest). Vielleicht hast du die Zugagsdaten per Mail bekommen, und du hast diese Mail noch?

          Ansonsten kann die sicherlich jeder “Spezialist” helfen, der ein klein wenig Ahnung von WordPress hat, aber vermutlich auch nur mit den Zugangsdaten…

          • Seraina sagt:

            Ich telefoniere morgen mit dem bruder meiner kollegin. der sollte die zugangsdaten haben. sobald ich mehr weiss, melde ich mich gerne bei dir. herzlichen dank für deine hilfestellung.

            schöner abend noch
            seraina

          • Seraina sagt:

            Niklas. Noch eine Frage. Wie hoch stehen die Chance zur Wiederherstellung der Seite?

          • niklas sagt:

            Das sollte kein Problem sein. Es wurde ja nichts gelöscht o.ä. es ist nur etwas verstellt, was man leider jetzt nicht mehr über die Website zurückstellen kann. Wenn man das korrigiert, funktioniert alles so wie immer :)

          • Seraina sagt:

            Hallo Niklas

            Es hat geklappt. Wie er das aber bewerkstelligen konnte, weiss ich nicht resp. war da was mit Zeile 19. Da ich den ursprünglichen “Text” noch hatte, konnte er diesen dann in der Zeile 19 wieder einfügen. War eine Sache von ein paar Minuten.

            Ich danke dir herzlich und wünsche eine gute Zeit.
            Seraina

          • niklas sagt:

            Schön, das alles geklappt hat!

  4. Werner sagt:

    Hallo,

    habe den Code in die functions.php eingefügt. (Expound_Theme)
    Ziel sollte sein, daß auf der Blog-Seite das erstellte “Blog_menü” angezeigt wird.
    Hier der abgeänderte Code, der leider auf der Blog-Seite nur das mainmenue anzeigt??

    function nr_2010_wp_nav_menu_args($args = 'blog')
    {
    if ( is_page(blog) ) //custom menus only on sites
    {
    global $post;

    $menu_name = get_post_meta($post->ID, 'Blog_menü', true);

    if( !empty($menu_name) && is_nav_menu($menu_name) )
    {
    $args['menu'] = $Blog_menü;
    }
    }
    return $args;
    }
    add_filter( 'wp_nav_menu_args', 'nr_2010_wp_nav_menu_args' );

    Wo liegt der Fehler

    Schöne Dank für jeden Hinweis

    Werner

    • niklas sagt:

      Hallo Werner!

      Irgendwie werde ich aus deinen Modifikationen nicht so recht schlau…

      Wenn ich das richtig verstehe, möchtest du auf der Hauptseite (und auf den einzelnen Beiträgen?) ein anderes Menü einblenden?

      Dann würde ich diesen Code benutzen:

      //Filter the arguments for the wp_nav_menu_function to include a custom menu on pages.
      function nr_2010_wp_nav_menu_args($args = '')
      {
      if( is_home() || is_single() ) //custom menu on blog
      {
      $menu_name = "Blog_Menü";
      if( is_nav_menu($menu_name) )
      {
      $args['menu'] = $menu_name;
      }
      }

      if ( is_page() ) //custom menus on pages from meta
      {
      global $post;

      $menu_name = get_post_meta($post->ID, 'menu_name', true);

      if( !empty($menu_name) && is_nav_menu($menu_name) )
      {
      $args['menu'] = $menu_name;
      }
      }
      return $args;
      }
      add_filter( 'wp_nav_menu_args', 'nr_2010_wp_nav_menu_args' );

      (Ungetestet!)

      Dort wird zusätzlich noch abgefragt, ob wir auf der Homepage (is_home()) oder auf einer Post-Seite (is_single()) sind, und dann das Menü “Blog_Menü” geladen, wenn es denn existiert.

      Vielleicht hilft dir das weiter? Ansonsten noch mal nachfragen :)

  5. Werner sagt:

    Hallo Niklas,

    vielen Dank für deine Antwort. Leider funktioniert der code bei mir nicht.
    Ich möchte eine “normale” homepage mit wordpress erstellen. Darin soll ein Blog eingebaut werden. Ich habe 2 Menüs erstellt:
    1. “mainmenue” für die homepage
    2. “Blog-Menü” für den Blog
    Wenn ich auf den “Blog-Link” des mainmenue klicke, soll – mit anderem Header – ein Blog mit eigenem Blog-Menü erscheinen. Das Blog-Menü soll nicht in der sidebar erscheinen, sondern mit gleichem Aussehen – horizontal – wie das mainmenue.
    Mir ist nicht klar, wo ich in dem code mein “mainmenu” bzw, das “Blog-Menü” eintragen muss.

    Vielen Dank für einen weiteren Tip

    Werner

  6. niklas sagt:

    Ah, jetzt verstehe ich, was du vor hast :)

    Dann versuche es am besten mal mit diesem, kürzeren Code:


    //Filter the arguments for the wp_nav_menu_function to shwo custom menu on blog pages
    function nr_2012_wp_nav_menu_args($args = '')
    {
    if( is_home() || is_single() ) //custom menu on blog
    {
    $menu_name = "blog_menu";
    if( is_nav_menu($menu_name) )
    {
    $args['menu'] = $menu_name;
    }
    }
    return $args;
    }
    add_filter( 'wp_nav_menu_args', 'nr_2012_wp_nav_menu_args' );

    Der sollte dafür sorgen, dass auf allen Blog-Seiten das Menü mit dem Namen “blog_menu” angezeigt wird. Den Namen kannst du im Code natürlich ändern.

    Dann erstellt du noch das Menü, das auf allen anderen Seiten angezeigt werden soll, und setzt das unter http://Deine-Seite/wp-admin/nav-menus.php?action=locations als Standard für alle Seiten.

    Damit sollte auf allen Seiten das eingestellte Menü erscheinen, und nur auf den Blog-Seiten das spezielle Menü “blog_menu”. Die Custom Post Fields brauchst du dann nicht mehr.

    Ich hoffe so funktioniert es, sonst helfe ich gerne weiter, zumindest bei einer aussagekräftigen Fehlerbeschreibung ;)

  7. Werner sagt:

    Hallo Niklas,

    bist du schnell – toll. Geht leider immer noch nicht.
    Habe im Dashbord unter Menüs mein mainmenue als Hauptmenü und als “Secondary Menu” das blog_menu erstellt. Ohne Fehlermeldung wird weiter nur das mainmenue angezeigt. Habe dann mit dem Plugin “Custom Menu Wizard” mein blog_menu ausgewählt. Es erscheint jetzt zwar, aber zusammen mit dem mainmenue.
    Fällt dir noch was ein??
    Schöne Grüße

    Werner

    • niklas sagt:

      Seltsam… Ich hab es gerade noch mal bei mir ausprobiert, und es hat wunderbar funktioniert.

      Ich habe zwei Menüs angelegt, “blog_menu” und “main_menu”. Dann habe ich “main_menu” als primäres Menü eingestellt. Das sieht so aus:

      http://i.imgur.com/dc87J1s.png

      (Es kann sein, das dein Theme da noch mehr Optionen hat, dann auch überall “main_menu” auswählen. Dann kann dein Theme mehr als ein Menü gleichzeitig anzeigen)

      Dann habe ich den Code von oben an das Ende der functions.php des aktiven(!) Themes kopiert. Danach hatte ich im Blog das “blog_menu”, und auf allen anderen Seiten das “main_menu”.

      Wenn es gar nicht geht, probiere mal das aus:


      function nr_2012_wp_nav_menu_args($args = '')
      {
      $args['menu'] = "blog_menu";
      return $args;
      }
      add_filter( 'wp_nav_menu_args', 'nr_2012_wp_nav_menu_args' );

      Damit wird auf allen Seiten das Menü durch “blog_menu” ersetzt. Damit kann du sehen, ob der Code überhaupt funktioniert. Und natürlich muss der Name des Menüs genau stimmen, ansonsten wird wieder das “main_menu” angezeigt.

      Während dieser Tests am besten alle anderen Plugins die was mit den Menüs zu tun haben abschalten. Ich hoffe damit kommst du dem Fehler auf die Spur :)

      -Niklas

  8. Werner sagt:

    Hallo Niklas,

    die gute Nachricht: das “blog_menu” wird durch deinen code auf allen Seiten angezeigt.
    Ansonsten hat sich leider nichts geändert. Habe es auch mit dem Twenty Eleven Theme probiert. Welches Theme hast du benutzt?

    Noch einen schönen Abend

    Werner

    • niklas sagt:

      Das ist ja wirklich seltsam. Ich habe hier das TwentyThirteen Theme zum testen genommen, und hier auf dem Blog läuft TwentyTen.

      Eigentlich sollte das Theme aber egal sein.

      Ich kann mir ehrlich gesagt nicht vorstellen, warum das jetzt nicht funktioniert, gerade weil es ja auch mit dem letzten Code überall angezeigt wird…

      Das einzige was mir noch einfallen würde, wäre mir das mal “vor Ort” anzusehen, aber dazu müsste ich Zugang zu der entsprechenden WP Installation haben… Ich kann mir aber gut vorstellen, dass du das nicht möchtest… Ansonsten ist mir das echt schleierhaft…

      Schöne Grüße
      Niklas

  9. Werner sagt:

    Hallo Niklas,

    es liegt NICHT an Deinem Code. Ich hatte zur Lösung des Problems – eigenen Header für die Blogseite – unter Einstellungen/Lesen keine Beitragsseite angegeben. Jetzt habe ich meinen Blog als Beitragsseite angegeben und das Menü wird jetzt angezeigt (aber mein Header nicht). Werde mich jetzt mit dem Unique Header Plugin amüsieren in der Hoffnung, dass auch dieses Problem gelöst wird.
    Jedenfalls vielen Dank für die tolle Unterstützung und schöne Grüße aus dem sonnigen Rheinland

    Werner

  10. Werner sagt:

    stimmt. Dank “Unique Headers” Plugin ist auch mein Headerproblem gelöst und ich kann erst mal meinen PC ausschalten und was an die frische Luft. Nochmals schönen Dank und sonnige Grüße

    Werner

  11. Werner sagt:

    Hallo Niklas,

    leider ist bei den Menüs doch noch ein Problem aufgetaucht. Wenn ich im “Blogbereich” bin, wechselt das Blog_Menü zum mainmenue, wenn ich die einzelnen Kategorien anklicke. (Bei den Kommentaren und Beiträgen nicht). Unter Dashboard-Menüs gibt es leider keine Möglichkeit, die einzelnen Kategorien mit dem dem Blog_menü zu verbinden.
    Wäre schön, wenn dir hierzu ein Lösung einfallen würde.

    Schöne Grüße

    Werner

    • niklas sagt:

      Das lässt sich einfach beheben: Einfach die Zeile
      if( is_home() || is_single() )
      durch
      if( is_home() || is_single() || is_category())
      austauschen. Dort kannst du auch noch mehr “Contitional Tags” einbauen, wenn dir danach ist ;)

  12. Werner sagt:

    Hallo Niklas,

    gewusst, wie. Vielen Dank und schöne Grüße

    Werner

  13. Pingback: In WordPress auf verschiedenen Seiten unterschiedliche Menüs anzeigen | vanvox.de

  14. Tina Krug sagt:

    Hallo Niklas,

    danke für die tolle Anleitung!
    Aber ich bin leider ein kompletter Grünschnabel und verstehe nicht wo ich in den Code den MENÜNAMEN und die SEITEN-ID eingeben muss…

    Einfaches Beispiel:
    Das alternative Menü, das ich auf einer bestimmten Seite haben will, nennen wir “menü2″. Dieses lege ich nun an (unter Design > Menüs). OK! Nun will ich “menü2″auf der Seite mit der Page ID 12 haben. Wo schreibe ich “menü2″ rein und wo die Page ID?

    Es wäre ein Traum, wenn du mir helfen kannst!

    Vielen Dank schon mal!!!
    Tina

    • niklas sagt:

      Hallo Tina!

      Bei dem Code hier wird der Name des Menüs aus dem Namen der Seite abgeleitet. Wenn ich also zum Beispiel für diesen Artikel ein eigenes Menü haben will, muss es den Namen “menu-wordpress-eigenes-menu-fur-bestimmte-seiten” haben.

      Das ist natürlich ein wenig umständlich, darum gibt es hier eine verbesserte Version: http://bueltge.de/benutzerdefinierte-felder-zum-steuern-des-wordpress-nav-menu/

      Dort wir der Name des Menüs aus einem “benutzerdefinierten Feld” gelesen, genauer gesagt dem Feld mit dem Namen “menu_name”. Du musst jetzt also die Seite Nummer 12 bearbeiten, oben auf “Optionen” klicken, und dort den Editor für benutzerdefinierte Felder aktivieren, und dann ein Feld mit dem Namen “menu_name” und dem Wert “menü2″ anlegen. Dann sollte das Menü angelegt werden.

      Ich kann dazu gerne auch noch mal ein Bild posten, falls das helfen sollte ;)

      Im Code muss jedenfalls in beiden Versionen nichts geändert werden.

      Schöne Grüße
      Niklas

      • Tina Krug sagt:

        Hallo Niklas,

        erstmal vielen lieben Dank für das super schnelle Feedback, Wahnsinn!!

        Nun habe ich es gemacht wie von dir (in der neuen Version) beschrieben und bekommen diese Fehlermeldung (siehe unten), der vermutlich durch das Theme hervorgerufen wird :(
        Hast du zufällig eine Idee?

        Viele Grüße!
        Tina

        //Filter the arguments for the wp_nav_menu_function to
        Warning: Cannot modify header information – headers already sent by (output started at /var/www/web991/html/wp-content/themes/maxima-v1-04/functions.php:163) in /var/www/web991/html/wp-admin/post.php on line 233

        Warning: Cannot modify header information – headers already sent by (output started at /var/www/web991/html/wp-content/themes/maxima-v1-04/functions.php:163) in /var/www/web991/html/wp-includes/pluggable.php on line 896

        • niklas sagt:

          Hi,

          Das sieht irgend wie so aus, als ob du den Code nicht richtig in die functions.php eingebunden hast. Kannst du vielleicht mal die ganze Datei posten?

          Ich vermute, der Code steht nicht zwischen den < ?php ?> Tags…

          • Tina Krug sagt:

            Moin Moin Niklas,

            ah ok, gelöst! Dachte der Code muss ans Ende.. Nun habe ich ihn an den Anfang gestellt und jetzt passt es ;) Klasse! Vielen Dank!!!

            Sag mal, hast du vielleicht auch eine Idee, wie das Logo im Header auf bestimmten Seiten ausgetaucht werden kann (eigentlich ähnliche Thematik)?

            Viele Grüße!
            Tina

          • niklas sagt:

            Hi Tina,

            Ja dass sollte sich ganz ähnlich machen lassen. Dafür scheint es aber auch schon ein paar Plugin zu geben, ich habe gerade diese gefunden: https://wordpress.org/plugins/custom-header-extended/

            Mit ein wenig Googlen schient man da eine Menge zu zu finden. Im Grunde könnte man sicher auch das Plugin oben anpassen, wenn du nichts passendes findest ;)

            Niklas

  15. Thomas sagt:

    Hallo Niklas,

    vielen Dank für Deinen vielversprechenden Ansatz zur Erstellung eigener Menüs für bestimmte Seiten.

    Auf bueltge.de hast Du Dich dem Thema auch angenommen und ja auch einige Anwenderfragen beantwortet. Einer von diesen wollte erreichen, dass das Hauptmenü gleich bleibt, aber ein zweites Untermenü sich mit jeder Seite verändert. Du hattest folgendes vorgeschlagen: “Das lässt sich relativ einfach einbauen: Hinter das is_page() kommt noch ein && $args[‘theme_location’] == ‘xxxx’. Das ganze muss noch in die if Klammer! Statt dem xxx musst du natürlich den Namen der Location angeben, für dass du den dynamischen Wechsel möchtest.”

    Jetzt möchte ich darauf nochmals zurückkommen: Auch ich bräuchte, dass ein Hauptmenü (obern quer) fest stehen bleibt, sich jeder Seite aber ein anderes Untermenü (seitlich) zuordnen lässt. Es gibt beide Menüs, eines ist im “register_nav_menus” eingetragen, das andere habe ich über Widget “Individuelles Menü” (Position Sidebar) eingebunden. Wie kann ich jetzt dieses individuelle Untermenü nach Deiner Methode adressieren, ohne dass davon das Hauptmenü betroffen wird?

    Hast Du denn eine Idee?

    Danke & schöne Grüße,
    Thomas

    • niklas sagt:

      Hi Thomas,

      das ist tatsächlich gar nicht so einfach, denn leider gibt das Widget keine Kennung an wp_nav_menu, an der man den Zugriff identifizieren kann… Aber wenn du Glück hast, gibt das Theme die ‘theme_location’ an, dann kannst du das Widget daran identifizieren, dass die ‘theme_location’ eben nicht gesetzt ist. Um da genaueres sagen zu können, müsste ich wissen, welches Theme du benutzt, oder du musst zumindest mal den Aufruf von wp_nav_menu des Themes posten ;)

      So ganz einfach ist das auf jeden Fall nicht… Es bleiben natürlich immer noch Hacks, wie mitzählen, wie oft der Filter aufgerufen wird… Aber das geht natürlich ganz schnell schief, wenn man mal was am Theme ändert :P

      Schöne Grüße
      Niklas

      • Thomas sagt:

        Hallo Niklas,

        vielen Dank für Deine Antwort.

        Mittlerweile (und nach etlichen vergeblichen anderen Versuchen) bin ich auf ein Plugin names “Per Page Sidebars” gestoßen (http://wordpress.org/plugins/per-page-sidebars/) mit dem ich das Seitenmenü im Widgetbereich sowie das Bottommenü im Footer individuell zuteilen kann, ohne dass davon das Hauptmenü beeinträchtigt wird. Wie sauber das Plugin arbeitet, kann ich nicht beurteilen – auf den ersten Blick jedoch scheint alles gut zu funktionieren.

        Schöne Grüße,
        Thomas

  16. pke sagt:

    hallo
    danke für interessanten ausführungen – aber ich werde nicht schlau – ich will (wp4) folgendes machen
    1. Eingangsseite mit silder und hinweis auf drei unterwebs
    2. pro unterweb eine eigene hauptnavi
    3. ich verwende twentytwelve-child mit hauptmenue( das soll in jedem bereich anders sein) und einem top menue (da sollen meine drei bereiche hin)
    bisher hab ich nur eine lösung mit installation von drei wp’s – alle in einem eigenen ordner( quasi selbständig…)
    kann ich das mit deinem code einfacher lösen? und wo genau einfügen?
    danke bestens
    pke

    • Hi,

      Also vermutlich könnte man da aus dem Code oben irgendetwas basteln, aber so wirklich super würde das nicht werden. Du hast ja im Grunde drei unabhängige Website, die zu zusammenfassen willst.

      Ich würde mir mal das Multisite (aka MU) Feature von WordPress ansehen: http://codex.wordpress.org/Create_A_Network
      Damit kannst du im Endeffekt mehrere getrennte Installation von WordPress haben, aber alle laufen mit dem gleichen Kern (also musst du z.B. Updates nur ein Mal machen). Ist leider nicht so einfach aufzusetzen, da es sich mehr an Admins richtet. Mit ein bisschen technischem Background sollte das aber machbar sein. Ich würde mal vermuten, dass das die beste Lösung für dein Problem ist…

      -Niklas

  17. linQ sagt:

    Hallo, super interessant.
    Habe folgendes Problem:
    Habe den normalen Main Menu und auf Seite A soll zusätzlich Menu A erscheinen und auf Seite B Menu B usw. Main Menu bleibt aber auf allen Seiten erhalten. Mit Ihrem Code kann ich aber nur das Main Menu auf A oder B oder C verändern.
    Wie kann ich den Code für ein zweites Menu nutzen? Soll ich für ein zweites Menu auch etwas in header.php verändern?

    • linQ sagt:

      Hallo, habe jetzt bei functions.php
      ein primary2 Menu registriert
      register_nav_menus( array(
      ‘primary2′ => ‘Primary Menu 2′,));

      und dieses bei header.php mit
      wp_nav_menu( array( ‘theme_location’ => ‘primary2′, ‘container_class’ => ‘menu-footer’) ); eingefügt.

      Nun geht es nur darum, dass Ihr code ganau auf dieses “primary2″ auswirkt und nicht auf das primary Menu.

      • Hi,

        das ist ganz einfach: Einfach zwischen Zeile 4 und 5 noch das hier einfügen:

        if($args['theme_location'] != "primary2") return $args;

        Damit wird der Code nur aktiv, wenn gerade das Menü “primary2″ gefiltert wird.

  18. Marius sagt:

    Hallo :-)

    Ich habe auch eine Frage denn ich komme gerade ins stolpern.
    ich habe eine Seite mit einem Mainmenu Namens”Normales Menu”
    jetzt übersetze ich die Seite gerade auf english also brauch ich ein zweites Main Menu für die Englische Seite was ich auch angelegt habe mit dem Namen “englishmenu”

    Wie würde der Code für mich dann aussehen, dass auf dem englischen Teil der Seite das englische Menu angezeigt wird ?

    Mein Versuch:
    function nr_2012_wp_nav_menu_args($args = ”)
    {
    if( is_home() || is_single() )
    {
    $menu_name = “englishmenu”;
    if( is_nav_menu($menu_name) )
    {
    $args[‘englishmenu’] = $menu_name;
    }
    }
    return $args;
    }
    add_filter( ‘wp_nav_menu_args’, ‘nr_2012_wp_nav_menu_args’ );

    • niklas sagt:

      Hi Marius,

      also so funktioniert das auf jeden Fall nicht. Wie kann man denn feststellen, ob man im englischen Teil der Seite ist? Dafür muss dann eine Bedingung in das erste if, und in den Body des zweiten ifs muss dann etwas in Richtung von


      $args['menu'] = $menu_name;


      $args['menu']
      gibt an, welches Menü benutzt werden soll. Das muss eben geändert werden, wenn man sich auf der englischen Seite befindet. Ich glaube, inzwischen wird für mehrsprachige Blogs übringens WP-MU empfohlen, da hat man dann das Problem nicht, weil die zweite Sprache ein (fast) komplett unabhängiger Blog ist.

      Schöne Grüße
      Niklas

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>