WordPress bietet eine enorme Menge an Möglichkeiten, Eingaben des Anwenders zu validieren. Das ist an sich eine gute Sache, und ich freue mich, wenn ich Themes und Plugins sehe, die davon auch Gebrauch machen, statt einfach nur stumpf die Usereingaben zu übernehmen. Allerdings kann das auch ins Auge gehen, denn WordPress kann nur formale Vorgaben testen, aber nicht bewerten, ob der Test an sich sinnvoll ist.
Ein klassisches Beispiel dafür, wie man es nicht machen sollte, habe ich vor einiger Zeit in einem Theme namens DAQ gefunden. In der functions.php findet sich folgende Funktion:
function daq_check_number( $value ) { if ( preg_match( „/^\+[0-9]{2} [0-9]{5} [0-9]{5}$/“|“/^(\([0-9]{3}\)|[0-9]{3}-)[0-9]{3}-[0-9]{4}$/“, $value ) ) { return $value; } else { return „“; } }
Verwendet wird dieser Code im Customizer (Im Dashboard unter Design, früher hieß der Menüpunkt „Anpassen“). Hier klinkt das Theme einige Eingabefelder für Kontaktinformationen ein, deren Inhalt vom Theme-Entwickler gewissenhaft validiert wird. Die Implementation an sich ist wirklich nach dem Lehrbuch, da gibt es wenig auszusetzen. Der Teufel steckt aber im Detail: Akzeptiert werden durch den Code in obiger Funktion nur Telefonnummern die entweder dem Format +nn nnnnn nnnnn
oder (nnn)nnn-nnnn
entsprechen.
Ersteres trifft man beispielsweise in Indien an, letzteres nennt sich North American Numbering Plan und wird wie der Name schon andeutet, unter anderem in den USA und Kanada verwendet.
Viele deutsche Telefonnummern passen in keines der beiden Muster, und das war auch der Grund, warum ich mir das Theme anschaute – ein Kunde hatte sich das Theme der Optik wegen ausgesucht und war nun schon der Verzweiflung nahe, weil sich seine Telefonnummer einfach nicht speichern ließ, sondern immer durch die Voreinstellung +99 99999 99999 ersetzt wurde.
Da nun die Ursache klar war, konnte ich dem Kunden auch schnell mittels Child Theme weiterhelfen. Das Theme selbst wollte ich nicht anfassen, um bei zukünftigen Updates nicht jedes Mal die Änderungen wiederholen zu müssen. Also flugs einen Ordner angelegt, eine entsprechende style.css
erzeugt und das ganze mit einer functions.php abgerundet, die das Eingabefeld aus DAQ durch ein eigenes ersetzt.
Fazit: Mission erfüllt, Kunde glücklich. 🙂