Was bei Titletags seit WordPress 3.6 geht, nämlich die Umwandlung von Umlauten in „ae“, „oe“ und „ue“, vermisse ich bei WordPress für Dateinamen immer noch. Grundsätzlich funktioniert es zwar, Bilder mit Umlauten und scharfem »ß« in Dateinamen einzusetzen, allerdings können diese Zeichen in Dateinamen selbst innerhalb von WordPress zu Lesefehlern führen. Betroffene Bilder konnte ich beim Testen in der Vorschauansicht der Mediathek nach dem Hochladen nicht sehen (in der Detailansicht allerdings schon).
Im Vergleich der Funktionen sanitize_file_name()
und sanitize_title()
fällt auf, dass die Titel durch die Funktion remove_accents()
geschickt werden. Denselben Zeichenfilter testete ich an Dateinamen (wird nur auf Dateien angewendet die noch hochgeladen werden, nicht bestehende).
function pppf_extend_filename_sanitization($title) {
return remove_accents($title);
}
add_filter( 'sanitize_file_name','pppf_extend_filename_sanitization');
Ergebnis mit denselben vier Testdateien
Durchgehende Kleinschreibung
Mit strotolower
werden Großbuchstaben in Dateinamen abschließend noch in Kleinbuchstaben umgewandelt.
function pppf_extend_filename_sanitization($title) {
return strtolower(remove_accents($title));
}
add_filter( 'sanitize_file_name','pppf_extend_filename_sanitization');
Es ist nicht auszuschließen, dass beim XML-Import einer WordPress-Site die Dateinamen in Posts ebenfalls umbenannt werden, die Dateien selbst aber nicht. In einem solchen Fall müsste die Funktion vorübergehend ausgesetzt werden, oder betroffene Dateien umbenannt.
Test ohne Funktion
Test mit Funktion als / in einem Plugin
Test mit Funktion in der functions.php
Damit der Filter für Umlaute korrekt funktioniert, muss die Sprache der Site auf Deutsch (de_DE oder de_DE_formal) gestellt sein, oder die Abfrage wird entsprechend umgeschrieben.
// Used for locale-specific rules
$locale = get_locale();
if ( 'de_DE' == $locale || 'de_DE_formal' == $locale ) {
$chars[ chr(195).chr(132) ] = 'Ae';
$chars[ chr(195).chr(164) ] = 'ae';
$chars[ chr(195).chr(150) ] = 'Oe';
$chars[ chr(195).chr(182) ] = 'oe';
$chars[ chr(195).chr(156) ] = 'Ue';
$chars[ chr(195).chr(188) ] = 'ue';
$chars[ chr(195).chr(159) ] = 'ss';
}
Erweiterung der Funktion bei anderen Spracheinstellungen
function pppf_extend_filename_sanitization($title) {
$locale = get_locale();
if (seems_utf8($title) && ( 'de_DE' != $locale && 'de_DE_formal' != $locale )) {
$chars[ chr(195).chr(132) ] = 'Ae';
$chars[ chr(195).chr(164) ] = 'ae';
$chars[ chr(195).chr(150) ] = 'Oe';
$chars[ chr(195).chr(182) ] = 'oe';
$chars[ chr(195).chr(156) ] = 'Ue';
$chars[ chr(195).chr(188) ] = 'ue';
$chars[ chr(195).chr(159) ] = 'ss';
$title = strtr($title, $chars);
}
return strtolower(remove_accents($title));
}
add_filter( 'sanitize_file_name','pppf_extend_filename_sanitization');
Die angefügte erweiterte Funktion pppf_extend_filename_sanitization()
wurde lediglich mit der Spracheinstellung en_US getestet
Schreibe einen Kommentar