Utilizzando WordPress può capitare di voler caricare un file per condividerlo con i propri lettori. Attraverso gli strumenti a nostra disposizione, bastano un paio di click per ottenere il risultato sperato… beh, quasi sempre.

A volte, infatti, potremmo ricevere un fastidioso messaggio di errore (“Questo tipo di file non è consentito per questioni di sicurezza.”) che ci impedisce di completare l’operazione in modo corretto. Ciò accade perché in WordPress esiste una whitelist di estensioni di file che è possibile caricare, mentre gli altri sono bloccati per evitare la diffusione di file potenzialmente pericolosi.

Aggirare questo controllo è relativamente semplice, poiché è sufficiente inserire il file in un archivio zip, una tra le estensioni consentite. Ovviamente la soluzione non è delle più pulite, ma estremamente veloce e semplice da attuare, anche dagli autori.

Per fare le cose in maniera più seria è necessario godere di privilegi un più elevati, visto che è necessario poter modificare il file functions.php del tema in uso. In particolare sarà necessario aggiungere, con le giuste modifiche, le seguenti righe:

function my_myme_types($mime_types){
$mime_types['avi'] = 'video/avi';
$mime_types['apk'] = 'application/vnd.android.package-archive';
return $mime_types;
}
add_filter('upload_mimes', 'my_myme_types', 1, 1);

Con le righe di questo esempio si stanno aggiungendo i file apk ed avi alla lista dei file che è possibile caricare. Basterà quindi modificare estensione e tipo mime modificandoli al valore che ci interessa.

Allo stesso modo è possibile impedire che un file previsto nella whitelist venga caricato agendo in maniera molto simile:

function my_myme_types($mime_types){
unset($mime_types['pdf']);
return $mime_types;
}
add_filter('upload_mimes', 'my_myme_types', 1, 1);

Infine è possibile resettare completamente l’array dei tipi consentiti e rigenerarne uno proprio, in modo da avere tutto sotto controllo:

function my_myme_types($mime_types){
$mime_types = array(
'jpg|jpeg|jpe' => 'image/jpeg',
'gif' => 'image/gif',
'png' => 'image/png',
'bmp' => 'image/bmp',
'tif|tiff' => 'image/tiff' );
return $mime_types;
}
add_filter('upload_mimes', 'my_myme_types', 1, 1);