WordPress erlaubt SVG-Dateien standardmäßig nicht beim Upload in die Mediathek. Der Grund ist simpel: SVG-Dateien sind keine klassischen Bilddateien wie JPG oder PNG. Eine SVG-Datei basiert auf XML und kann potenziell auch schädlichen Code enthalten. Genau deshalb blockiert WordPress dieses Dateiformat aus Sicherheitsgründen.
Trotzdem gibt es viele sinnvolle Fälle, in denen SVG-Dateien gebraucht werden. Zum Beispiel für Logos, Icons oder einfache Grafiken, die gestochen scharf auf jedem Bildschirm dargestellt werden sollen. Wer bewusst mit SVGs arbeitet und nur vertrauenswürdige Dateien hochlädt, kann den SVG-Upload in WordPress gezielt erlauben.
Warum sind SVG-Dateien in WordPress gesperrt?
SVG steht für „Scalable Vector Graphics“. Es handelt sich dabei um ein vektorbasiertes Grafikformat. Der große Vorteil: SVGs bleiben bei jeder Größe scharf und sind meistens sehr klein. Für Logos und Icons ist das ideal.
Der Nachteil: SVG-Dateien können mehr enthalten als nur reine Bildinformationen. Da sie auf XML basieren, können sie theoretisch auch Skripte oder andere unerwünschte Inhalte enthalten. Wenn ungeprüfte Benutzer SVG-Dateien hochladen dürfen, kann das ein Sicherheitsrisiko sein.
Deshalb sollte der SVG-Upload nicht pauschal für alle Benutzerrollen freigegeben werden. Sinnvoll ist es, den Upload nur für Administratoren zu erlauben.
SVG Upload per functions.php erlauben
Der folgende Code erlaubt SVG-Uploads in WordPress nur für Administratoren. Zusätzlich sorgt er dafür, dass SVG-Dateien in der Mediathek korrekt erkannt und angezeigt werden.
Du kannst den Code unten in die functions.php deines aktiven Themes einfügen. Wichtig: Wenn deine functions.php bereits mit <?php beginnt, darfst du diesen PHP-Starttag nicht nochmal einfügen.
/**
* SVG Uploads für Administratoren erlauben
*/
function elico_allow_svg_uploads($mimes) {
if (current_user_can('manage_options')) {
$mimes['svg'] = 'image/svg+xml';
$mimes['svgz'] = 'image/svg+xml';
}
return $mimes;
}
add_filter('upload_mimes', 'elico_allow_svg_uploads');
function elico_fix_svg_filetype_check($data, $file, $filename, $mimes) {
$filetype = wp_check_filetype($filename, $mimes);
if ($filetype['ext'] === 'svg') {
$data['ext'] = 'svg';
$data['type'] = 'image/svg+xml';
}
if ($filetype['ext'] === 'svgz') {
$data['ext'] = 'svgz';
$data['type'] = 'image/svg+xml';
}
return $data;
}
add_filter('wp_check_filetype_and_ext', 'elico_fix_svg_filetype_check', 10, 4);
function elico_display_svg_in_media_library($response, $attachment, $meta) {
if (!empty($response['mime']) && $response['mime'] === 'image/svg+xml') {
$response['sizes'] = [
'full' => [
'url' => $response['url'],
'width' => 150,
'height' => 150,
'orientation' => 'landscape'
]
];
}
return $response;
}
add_filter('wp_prepare_attachment_for_js', 'elico_display_svg_in_media_library', 10, 3);
Was macht dieser Code genau?
Der Code erweitert die erlaubten Dateitypen in WordPress um .svg und .svgz. Diese Freigabe greift aber nur, wenn der aktuelle Benutzer Administratorrechte besitzt. Das wird über current_user_can('manage_options') geprüft.
Zusätzlich korrigiert der Code die Dateityp-Prüfung von WordPress. WordPress prüft beim Upload nicht nur die Dateiendung, sondern auch den MIME-Type. Ohne diese zusätzliche Korrektur kann es passieren, dass SVG-Dateien trotz Freigabe weiterhin abgelehnt werden.
Der letzte Teil sorgt dafür, dass SVG-Dateien in der Mediathek besser dargestellt werden. Ohne diese Anpassung werden SVGs in der Medienübersicht manchmal nicht sauber als Bildvorschau angezeigt.
Warum nur für Administratoren?
SVG-Dateien können potenziell gefährlich sein, wenn sie aus unsicheren Quellen stammen. Deshalb wäre es keine gute Idee, den SVG-Upload für Redakteure, Autoren, Kundenkonten oder andere Benutzerrollen pauschal zu erlauben.
Wenn nur Administratoren SVG-Dateien hochladen dürfen, bleibt das Risiko deutlich besser kontrollierbar. Trotzdem gilt: Auch Administratoren sollten keine fremden oder ungeprüften SVG-Dateien hochladen. Besonders Dateien aus unbekannten Generatoren, kostenlosen Icon-Portalen oder fremden Quellen sollten vor dem Upload geprüft oder bereinigt werden.
SVG Upload über die .htaccess erlauben?
Es gibt auch die Möglichkeit, SVG-Dateien über die .htaccess auf Serverebene zu erlauben. Dabei wird dem Server mitgeteilt, wie er SVG-Dateien behandeln soll. Ein typischer Ansatz wäre zum Beispiel eine MIME-Type-Zuweisung über die .htaccess.
Das Problem: Diese Lösung setzt sehr tief auf Serverebene an und löst nicht sauber die eigentliche WordPress-Upload-Prüfung. WordPress prüft Uploads zusätzlich über eigene Mechanismen. Nur weil der Server SVG-Dateien kennt, heißt das noch nicht, dass WordPress den Upload korrekt und sicher erlaubt.
Außerdem ist die .htaccess-Variante aus Sicherheitsgründen meist die schlechtere Lösung. Sie unterscheidet nicht sauber nach Benutzerrollen. Eine Freigabe über die functions.php ist gezielter, weil du dort genau kontrollieren kannst, wer SVG-Dateien hochladen darf.
Klartext: SVG über die .htaccess freizuschalten ist technisch möglich, aber für WordPress in den meisten Fällen nicht die sauberste Lösung. Besser ist eine kontrollierte Freigabe über PHP mit Benutzerrechte-Prüfung.
Besser als functions.php: ein eigenes kleines Plugin
Die Lösung über die functions.php funktioniert. Sie hat aber einen Nachteil: Wenn du später das Theme wechselst, ist der Code weg. Deshalb ist ein kleines eigenes Plugin langfristig sauberer.
Für schnelle Anpassungen ist die functions.php in Ordnung. Für dauerhafte technische Funktionen, die unabhängig vom Design funktionieren sollen, ist ein Plugin die bessere Lösung.
Wichtige Sicherheitshinweise
SVG-Uploads sollten nie unkontrolliert für alle Benutzer freigegeben werden. Lade nur SVG-Dateien hoch, deren Herkunft du kennst. Wenn du SVGs von externen Quellen verwendest, solltest du sie vorher bereinigen oder prüfen.
Besonders kritisch sind SVG-Dateien, die direkt von Kunden, unbekannten Benutzern oder externen Plattformen stammen. In solchen Fällen reicht es nicht, den Upload einfach freizugeben. Dann brauchst du zusätzlich eine echte SVG-Sanitization, also eine technische Bereinigung der Datei.
Fazit
SVG-Dateien sind für Logos und Icons in WordPress sehr praktisch. Sie sind klein, skalierbar und bleiben auf jedem Bildschirm scharf. Trotzdem sollte man SVGs nicht leichtfertig freigeben, weil das Format sicherheitstechnisch sensibler ist als JPG oder PNG.
Die sauberste einfache Lösung ist eine gezielte Freigabe über die functions.php oder noch besser über ein kleines eigenes Plugin. Wichtig ist, dass der Upload nur Administratoren erlaubt wird. Eine pauschale Freigabe über die .htaccess ist technisch möglich, aber nicht empfehlenswert, weil sie die WordPress-Benutzerrechte nicht sauber berücksichtigt.