03.10.2022

Technische Doku & Snippets

TranslatePress rendert individuellen Sprachwähler für Default Sprache falsch

Problem

Beim individuellen Erstellen eines Sprachwählers für TranslatePress

$arr              = trp_custom_language_switcher();Code-Sprache: PHP (php)

liefert $arr ein mehrdimensionales Array mit allen notwendigen Parametern zurück, um einen individuellen Sprachwähler innerhalb einer Schleife zu rendern.

Im Frontend wurde dann aber beim Aktivieren der fremden Sprache der Eintrag des Array mit dem Key

"<span class="sf-dump-key">current_page_url</span>" => "<span class="sf-dump-str" title="32 characters">https://example.test/</span>"Code-Sprache: HTML, XML (xml)

überschrieben mit

https://example.com/enCode-Sprache: JavaScript (javascript)

Das “en” gehört da nicht hin!

Lösung

Ein eigenes Snippet, bei dem man zwischen den Sprachen umschalten kann und dieses dann via ShortCode einbinden, z.B:

add_shortcode( 'mnc_lang_switcher', function ( $atts = [], $content = null, $tag = '' ) {
	global $post;
	if ( ! function_exists( 'trp_custom_language_switcher' ) ) {
		return;
	}
	$arr              = trp_custom_language_switcher();
	$current_language = get_locale();
	$s = [];
	$arial_label = __( 'Sprachwähler', 'YOUR-THEME-DOMAIN' );
	foreach ( $arr as $lang ) {
		$url =  $lang['current_page_url'];
		$linktext = $lang['language_name'];
		if(strtolower($linktext) === 'german') {
			$linktext = 'Deutsch';
		}
		$class = get_locale() === $lang['language_code'] ? 'active' : '';
		$s[] = sprintf('<a data-no-translation-href class="%s" href="%s">%s</a>', $class, $url, $linktext);
	}
	$links = implode("\n", $s);
	return <<<OUT
<nav aria-label="$arial_label" class="mnc_lang_switch" data-no-translation>
	$links
</nav>
OUT;
} );
Code-Sprache: PHP (php)

Illustration einer grünen Blume mit einer Sonnenbrille auf, die in einer blau gepunkteten Vase steht