Polylang Sprachauswahl als Flaggen in einem WordPress Blocks-basierten Menü mit „Lazy Blocks“

Polylang nutze ich schon seit mehreren Jahren für die Mehrsprachigkeit dieser Seite (Deutsch/Englisch). Seit jeher war es mein Plugin der Wahl, aufgrund der sehr einfachen Bedienung und zuverlässigen Funktion. Die Seite lief bis Anfang 2026 mit dem WordPress-Theme „twentythirteen“ von 2013 in leicht abgewandelter Form.

Ich entschied sodann, dass ein Wechsel auf ein modernes Theme anstehen sollte. Die Umstellung war mit größeren Hürden verbunden als gedacht: Der Wechsel auf das Blocks-Prinzip verlangte mehrere Anpassungen und Änderungen, vorallem innerhalb von Menüs und Widget-Bereichen.

Unter anderem aber konnte nicht mehr mit wenigen Klicks eine Flaggen-Sprachauswahl für Polylang in Menüs platziert werden. Da die Menüs mithilfe von Blocks gebaut werden und Polylang die Sprachauswahl „Language Switcher“ für Blocks in seinem „Polylang Pro“ Angebot, zum Preis von 99 Euro pro Jahr für eine Einzelseite, versteckt.

Abhilfe schafft eine manuelle Programmierung in PHP, welche man etwas vereinfachen kann, indem man ein Blocks-Plugin wie „Lazy Blocks“ nutzt, welches die direkte Verarbeitung von PHP-Code erlaubt.

Schritt 1: Lazy Blocks installieren

Schritt 2: Block anlegen mit folgendem Markup

<?php

$languages = pll_the_languages(['raw' => 1]);

$flags = [
    'de' => '🇩🇪',
    'en' => '🇬🇧'
];

$format = current_theme_supports('html5', 'navigation-widgets') ? 'html5' : 'xhtml';

/** This filter is documented in wp-includes/widgets/class-wp-nav-menu-widget.php */
$format = apply_filters('navigation_widgets_format', $format);

if ('html5' === $format) {
    echo '<nav aria-label="' . esc_attr($aria_label) . '">';
}

echo '<ul style="list-style: none; padding: 0; margin: 0;">';

foreach ($languages as $lang) {
    $slug = $lang['slug'];
    $flag = $flags[$slug] ?? strtoupper($slug);

    echo '<li class="lang-item">';
    echo '<a href="' . esc_url($lang['url']) . '">';
    echo $flag;
    echo '</a>';
    echo '</li>';
}

echo "</ul>\n";

if ('html5' === $format) {
    echo '</nav>';
}

?>

Schritt 3: Nun muss der hinzugefügte „Lazy Block“ nur dem Template-Teil „Header“ hinzugefügt werden

Dazu muss eine eigene Abwandlung des Template-Teil „Header“ angelegt werden. Weiterführende Dokumentation dazu findet sich hier, aber leider nur in englischer Sprache.

Fertig!

Kommentare

Schreibe einen Kommentar

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