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/en
Code-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)