WordPress, per impostazione predefinita, non consente il caricamento dei file SVG nella libreria media. Il motivo è principalmente legato alla sicurezza: a differenza di formati come JPG o PNG, un file SVG è basato su XML e può contenere codice potenzialmente pericoloso. Per questo motivo, tentando di caricarlo, WordPress restituisce l’errore relativo al tipo di file non consentito.
Per risolvere il problema ho aggiunto un piccolo snippet PHP che abilita il formato image/svg+xml tra i MIME type accettati e forza WordPress a riconoscere correttamente l’estensione .svg. Ho limitato questa possibilità agli utenti amministratori, evitando quindi che autori, editor o altri profili possano caricare liberamente questo tipo di file.
Lo snippet può essere inserito nel functions.php di un child theme, in un plugin personalizzato oppure tramite un plugin come Code Snippets. Va comunque ricordato che l’abilitazione dell’upload non equivale alla sanificazione del file: è quindi opportuno caricare esclusivamente SVG prodotti internamente o provenienti da fonti affidabili.
<?php
/**
* Allow SVG uploads for administrators only.
*/
add_filter('upload_mimes', function (array $mimes): array {
if (current_user_can('manage_options')) {
$mimes['svg'] = 'image/svg+xml';
}
return $mimes;
});
/**
* Ensure WordPress correctly recognises SVG files.
*/
add_filter(
'wp_check_filetype_and_ext',
function (array $data, string $file, string $filename): array {
if (
current_user_can('manage_options') &&
strtolower(pathinfo($filename, PATHINFO_EXTENSION)) === 'svg'
) {
$data['ext'] = 'svg';
$data['type'] = 'image/svg+xml';
}
return $data;
},
10,
3
);
Lo script abilita la funzionalità di caricamento dei file svg solo per gli amministratori di wordpress.