Invalides HTML in den Lang-Attributen fixen

In WordPress 4.3 wurde bei einigen optionalen Sprachpaketen die formelle Form eingeführt. Beispielsweise bei der Sprachauswahl unter den Einstellungen mit „Deutsch (Sie)“.

Leider wurde bei dem Setzen der Sprachattribute in der Funktion language_attributes() etwas unvorsichtig agiert: Durch die in Themes übliche Zeile

<html <?php language_attributes(); ?>>

wird nach Wahl des Sprachpakets „Deutsch (Sie)“ folgendes erzeugt:

<html lang="de-DE-formal">

Dies macht den Code für den HTML-Validator invalid. Im Trac ist das Problem schon notiert worden: https://core.trac.wordpress.org/ticket/33511

Meine Lösung ist nicht elegant, aber sie reicht:

function remove_invalid_formal_language($language_attributes) {
    return preg_replace('/([a-z]+)\-([A-Z]+)\-formal\"/', '$1-$2"', $language_attributes);
 //   return preg_replace('/([a-z]+)\-([A-Z]+)\-formal\"/', '$1-$2-x-formal"', $language_attributes);
}

add_filter('language_attributes', 'remove_invalid_formal_language');

Ich lösche hier also einfach das „-formal“. Man könnte stattdessen auch das fehlende „-x“ einfügen. Das ist die auskommentierte Zeile.

Eine für WordPress-Entwickler elegantere Lösung würde wahrscheinlich eher die get_locale() Funktion nutzen. Dort könnte man dann im Array der verfügbaren Sprachcodes was machen.

Egal, es tut.

Da die Ursache ein Bug ist, der sicher eh irgendwann behoben wird, möchte ich auch nicht zu viel Zeit investieren.