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

Inhaltsverzeichnis

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)