Querdenkender Webworker mit WordPress-Affinität

Multisite Language Switcher ins Menü einbauen

Mir ist kürzlich aufgefallen, dass ich noch nie richtig erklärt habe, wie man den Multisite Language Switcher (recht) einfach in die Navigationsmenüs von WordPress einbauen kann. Wie man die neuen Menüs selbst in das Thema einbaut und benutzt, will ich aber nicht noch einmal erklären. Es gibt zu diesem Thema bereits unzählige Posts. Empfehlenswert ist beispielsweise der Artikel WordPress als CMS: Menüs im Admin-Bereich anlegen und verwalten von Ellen.

Am besten ich zeige erst einmal etwas PHP-Code, den ich dann exemplarisch für die Erläuterungen zur Funktionalität heranziehen kann. Die Funktionen sind als Filter implementiert, die automatisch von WordPress ausgeführt werden, sobald die entsprechenden Hooks (wenn man so will auch: Ereignisse) erreicht werden. Ich habe die Beispiele in diesem Artikel auch bewusst einfach gehalten, damit ihr nicht gleich den Mut verliert, wenn ihr selbst versuchen wollt, damit in der functions.php eures Themas zu experimentieren.

Vergesst bitte nicht, eure Originaldatei vorher noch einmal als Sicherheitskopie abzuspeichern!

1) Menü erweitern

Die Funktion my_custom_menu_item sorgt dafür, dass der Sprachumschalter an ein bestimmtes Menü angehängt wird. Am Anfang der Funktion wird erst einmal geprüft, ob der Multisite Language Switcher überhaupt aktiv ist und ob es sich um das Menü primary-nav handelt. Die Benennung hängt natürlich davon ab, mit welchen Argumenten die Funktion register_nav_menus aufgerufen wurde, um das/die Menü(s) in eurem Thema zu aktivieren. Sucht einfach nach dieser  Funktion in der functions.php! Der Aufruf $obj->get( 0 ) holt die Sprachlinks in der Kombination Flagge + Sprache (außerdem gibt es noch 1 = nur Text, 2 = nur Flagge und 3 Sprache + Flagge). Prinzipiell könnte man bereits in der foreach-Schleife an der Ausgabe der Links arbeiten, aber das wird bei komplexeren Szenarien schnell unsauber, sodass die folgende Funktion eine bessere Lösung bietet.

2) Links anpassen

Die Funktion my_msls_output_get ist für die Gestaltung der Links zuständig. Die Variablen, welche an die Funktion übergeben werden, sind – denke ich – ausreichend, um an der Ausgabe feilen zu können.

Der Parameter $url sollte eigentlich selbsterklärend sein. Er enthält das Linkziel zur entsprechenden Sprache.

Der Parameter $item ist ein MslsLink-Objekt, welches die Eigenschaften $src (URL zur Flagge), $txt (Beschreibung aus der Konfiguration) und $alt (Sprachcode der Website bsp. de-DE) besitzt. Man kann ein MslsLink-Objekt auch direkt ausgeben. Es präsentiert dann seine vordefinierte Ausgabe.

Der Parameter $current wiederum signalisiert, ob es sich um die aktuelle Website handelt, was natürlich nur wahr sein kann, wenn man das in der Konfiguration des Multisite Language Switcher auch so eingestellt hat, dass auch die Links zu aktuellen Seite ausgegeben werden sollen.

3) Alternativ eigene MslsLink-Klasse benutzen

Alternativ – oder aber auch zusätzlich, je nach Aufgabenstellung – kann dieser Schritt benutzt werden, wenn es darum geht, die Ausgabe im Link genauer zu steuern. Während sich der Code in Schritt 2 darum kümmert, wie der Link selbst gestaltet wird, kann man mit den wenigen Zeilen dieses Schritts steuern, was passiert, wenn das MslsLink-Object (in Schritt 2 das Object $item) als Zeichenkette ausgegeben wird.

Wenn die vordefinierten Eigenschaften src, alt und txt genug sind, reicht es aus, der eigenen Klasse lediglich einen angepassten format_string zuzuweisen, der den Anforderungen gerecht wird. Das obige Beispiel zeigt den Linktext nach der Flagge fett gedruckt an.

Have fun!

Das könnte Dich auch interessieren:

Kommentare

  1. Super, danke für die Anleitung. Dann werd ich mich da mal dransetzen. 😉

  2. Sehr interessantes Plugin. Da ich schön länger mit dem Gedanken gespielt habe einen zweisprachigen Blog ins Leben zu rufen muss ich – aufgrund dieser einfachen Lösung – jetzt wohl und habe keine Ausreden mehr.

  3. 1A Lösung für mehrsprachige Websites und gute Dokumentation. Alles klappt auf Anhieb.
    Gibt es eine Möglichkeit wenn „global“ zwischen den Sprachen gewechselt wird die jeweilige Seite beizubehalten?

    • @Kai Ich glaube, ich habe Deine Frage nicht ganz genau verstanden. Kannst Du den Fall noch genauer beschreiben?

      • bei mir wird beim sprachwechsel immer auf die wordpress startseite der jeweiligen sprache gewechselt. es wäre schön wenn die aktuelle seite bleiben würde und nur die sprache (der content etc.) wechselt… evtl. ganz einfach?

  4. Danke, für diesen ausführlichen Guide! Ich habe manchmal leider das Gefühl, dass es echt zu wenige solcher guten Guides gibt, wenn man etwas anders haben möchte in WP!

  5. Hy Dennis, sag mal hat das Plugin einen „Language-Checker“ eingebaut der dem Besucher gleich auch die richtige Sprache anzeigt wenn der Besucher mit dem entsprechenden Brower bzw. der entsprechenden Länderkennung zu Besuch kommt?

  6. Herman Müller meint:

    Der Artikel ist ist sehr hilfreich.
    Aber, welche Sprachen werden unterstützt?

    Lg Herman

  7. Danke für die kurze Anleitung. Habe so etwas für einen Kunden gesucht! Top!

  8. Das Thema Language Switcher hat mich auch schon lange beschäftig. Danke für das hervorragende Plugin und die verständliche Anleitung.

    Viele Grüße
    Herbert

  9. Super, danke für die Anleitung. Warum muss man immer selbst programmieren 😉

  10. Danke für den Tipp! Jetzt muss ich noch irgendwie den Content sinnvoll übersetzt bekommen 🙂

    • realloc meint:

      @sovus Das sollte – für mein Empfinden – bereits vor dem Einbau eines Plugins für Mehrsprachigkeit (wenigstens) in der Planung gewesen sein. 😉

  11. hey danke für die Anleitung, was meint ihr wieviel mehr Besucher sowas bringt wenn man auf zwei Sprachig Anbietet ? Für einen Blog ist es ja schon irgendwie ne menge Arbeit alles zu übersetzen. Sollte sich ja auch irgendwie zumindest Besuchertechnisch lohnen.

    • @sascha Aus der eigenen Erfahrung heraus würde ich sagen, dass sich das nur lohnt, wenn man da genauso viel Fleiß hineinsteckt, wie in das Hauptblog geflossen ist. Andererseits wird WordPress auch als CMS eingesetzt und da findet man in den Anforderungen ja oft Mehrsprachigkeit als ein Kriterium.

  12. Interessante Sache, muss erstmal recherchieren wie es sich mit meinem Thema im englischen verhält 🙂

  13. Wow sehr gutes Plugin, wenn man nicht nur nationale Kunden erreichen will.
    Nur für Anfänger ohne HTML Kenntnisse könnte es etwas schwierig werden.

  14. Abgefahrenes Plugin, bin begeistert! Vielen Dank!

    Was aber noch geiler wäre wenn der Parent-Menüpunkt „Sprachen“ heissen würde und es dann Unterseiten wie „Englisch“ und „Dänisch“ geben könnte…

    Geht das? 😉

  15. Hallo
    gibt es eine Möglichkeit die Flagge der aktuellen Sprache nicht anzuzeigen.
    Konkret möchte ich auf der deutschen Seite nur die englische Flagge und umgekehrt im Menü haben.
    Geht das und wie sieht der entsprechende Code aus?

    Gruss

  16. Hallo
    Vielen Dank für die Anleitung. Wir benutzen The7 Theme von DreamTheme. An welcher Stelle in der functions.php soll denn der Code einegfügt weden, Wenn ich es mache zerhaut es immer alles.

    • realloc meint:

      Hmm … das sollte keine Probleme bereiten. Der Code kann ruhig ans Ende der functions.php, nur musst Du darauf achten, die erste Zeile mit dem <?php aus den Beispielen nicht zu kopieren.

  17. Hallo,

    erstmal *thumps up* für dieses Plugin. Hatte einige andere auf meiner Seite installiert, aber dieses ist nun wirklich das Beste!
    Leider bekomme ich trotz deiner Anleitung den Sprachwechsler nicht auf die gleiche Ebene wie das Navigationsmenu (bin auch ein zimlicher Noob in WP…).
    Ich benutze ein Genesis Theme (Parallax Pro). Wenn ich den Code von Punkt 1 in die function.php einfüge… passiert rein gar nichts. Was genau muss ich am Code verändern?

  18. hallo,

    ich hatte vorher mit wpml gearbeitet und muss sagen, dass mir die lösung mit multisite und dem language-switcher tausendmal besser gefällt. vielen dank für das tolle plugin!!!

    ich habe nun noch eine relativ dummer frage: meine php-kenntnisse sind gleich null und ich würde den switcher gerne ans hauptmenü meines themes hängen. soweit ich das verstanden habe, sollte es mit dem code bei 1) klappen. muss ich da noch irgendwas anpassen? bei mir tut sich absolut gar nichts (the7.2 theme). in der erklärung heißt es ja, man solle nach „register_nav_menus“ in der functions.php suchen. ich kann diese funktion leider auch nach ausgiebiger suche in anderen dateien meines themes nicht finden.

    für einen tip wäre ich sehr dankbar!

    gruß philipp

  19. Hallo,
    Ich habe alles jetzt implementiert in meiner lokalen WP Multisite Version. Das Plugin mslsmenu wird auch in der Navi-bar angezeigt mit meinen beiden Flaggen für FR und DE wenn ich auf EN bin. Die Startseiten in den Menues sind auch verlinkt. Soweit alles parametriert jedoch wenn ich auf die Flage mit der Maus drücke zeigt es mir nur den Link am Mausezeiger an aber lädt diesen nicht!
    Hast Du da eine Idee kann ich einen Screenshot schicken?

    Grüsse
    Andreas

    • realloc meint:

      Ich nehme an, dass ich auf dem Screenshot nicht so viel erkennen kann, wenn es für Dich bereits stimmig aussieht. Sind denn die Tags alle geschlossen?

Deine Meinung ist uns wichtig

*