Désolé, vous n’avez pas l’autorisation de téléverser ce type de fichier.
En anglais : Sorry, you are not allowed to upload this file type.
Réponse rapide
WordPress refuse une extension absente de sa liste de types autorisés, ou un fichier dont le contenu ne correspond pas à l’extension. Ajoutez le type avec le filtre upload_mimes, ou convertissez le fichier dans un format accepté.
Vous téléversez un fichier SVG, JSON, une police .woff2, une archive ou un document, et WordPress répond « Désolé, vous n’avez pas l’autorisation de téléverser ce type de fichier. » L’envoi est refusé avant même d’être enregistré. L’erreur apparaît dans l’administration (médiathèque, éditeur de blocs, import de thème ou d’extension, champ de fichier d’une extension) et jamais côté visiteur.
Ce refus n’est pas un problème de taille (voir la fiche fichier trop volumineux) ni de droits d’écriture sur le serveur (voir impossible de créer le dossier). Il s’agit d’une règle de sécurité : WordPress n’accepte que les types de fichiers qu’il connaît et dont le contenu correspond à l’extension annoncée.
Ce que signifie cette erreur
Au moment du téléversement, la fonction wp_handle_upload() (wp-admin/includes/file.php) appelle wp_check_filetype_and_ext() (wp-includes/functions.php). Cette fonction procède en trois temps. Elle compare d’abord l’extension du fichier à la liste des types autorisés, fournie par get_allowed_mime_types() et filtrable avec upload_mimes. Elle examine ensuite le contenu réel du fichier : pour une image, wp_get_image_mime() ; pour les autres fichiers, l’extension PHP fileinfo. Elle vérifie enfin que le type détecté est cohérent avec l’extension. Si l’extension est inconnue ou si le contenu ne correspond pas, le type est écarté et l’erreur est renvoyée.
Plusieurs particularités expliquent des refus surprenants. La liste d’origine du cœur ne contient ni SVG, ni JSON, ni polices web : ces types sont refusés tant qu’on ne les autorise pas. Les types swf et exe sont toujours retirés, et les fichiers htm, html et js ne sont acceptés que pour un utilisateur disposant de la capacité unfiltered_html (get_allowed_mime_types()). Un fichier renommé (un PNG nommé .jpg, un tableur enregistré avec une mauvaise extension) échoue au contrôle de contenu. Les requêtes REST et wp_upload_bits() produisent le même message (wp-includes/functions.php).
Seule la capacité unfiltered_upload contourne la vérification. Elle n’est accordée que si la constante ALLOW_UNFILTERED_UPLOADS vaut true dans wp-config.php et, sur un réseau multisite, uniquement aux super-administrateurs (wp-includes/capabilities.php). Sur un réseau, le réglage « Types des fichiers téléversés » de l’administration du réseau ajoute un filtre supplémentaire (check_upload_mimes(), wp-includes/ms-functions.php).
Diagnostic rapide
| Symptôme / constat | Cause probable | À vérifier |
|---|---|---|
Refus d’un fichier .svg, .json, .woff2 ou d’un format récent | Type absent de la liste du cœur | Résultat de wp_check_filetype() pour ce nom de fichier |
| Un fichier ordinaire (image, PDF) est refusé alors que son type est autorisé | Extension qui ne correspond pas au contenu réel | Ouvrir le fichier, l’exporter à nouveau dans le bon format |
Refus d’un fichier .html ou .js pour un auteur ou un contributeur | Capacité unfiltered_html absente | Rôle de l’utilisateur ; test avec un compte administrateur |
| Refus d’un type pourtant autorisé sur un réseau multisite | Réglage « Types des fichiers téléversés » du réseau | Administration du réseau, Réglages, Paramètres du réseau |
| Le message apparaît seulement pour certains comptes | Filtre upload_mimes conditionné au rôle, ou extension de sécurité | Code du thème ou des extensions qui utilisent upload_mimes |
Les causes les plus fréquentes
- Un format non prévu par le cœur : SVG, JSON, polices web, formats vectoriels ou propriétaires.
- Une extension de fichier trompeuse : image enregistrée sous une mauvaise extension, document converti sans changer le nom.
- Un utilisateur sans la capacité
unfiltered_htmlqui téléverse du HTML ou du JavaScript. - Sur multisite, une liste de types autorisés trop courte dans les paramètres du réseau.
- Un code personnalisé ou une extension de sécurité qui restreint
upload_mimes.
Solutions pas à pas
1. Identifier ce que WordPress voit
Avant de modifier quoi que ce soit, vérifiez comment WordPress classe le fichier. Cette commande WP-CLI ne modifie rien et indique l’extension et le type retenus (des valeurs vides ou fausses signifient que le type est inconnu) :
wp eval 'print_r( wp_check_filetype( "fichier.svg" ) );'
file --mime-type fichier.svg
La seconde commande, exécutée sur un poste ou un serveur Linux, affiche le type réel du contenu. Si le type réel diffère de l’extension, passez à la solution 2.
2. Corriger un fichier mal nommé ou mal enregistré
Rouvrez le fichier dans son logiciel d’origine et exportez-le dans le format voulu (« Enregistrer sous » ou « Exporter »). Renommer simplement une extension ne suffit pas : WordPress lit le contenu. Pour les images dont l’extension ne correspond pas au format réel, WordPress peut corriger lui-même le nom lorsqu’il reconnaît le format, mais il refuse les autres cas par prudence. Si le format est inutilement exotique, convertissez-le (JPEG, PNG ou WebP pour une image, PDF pour un document).
3. Autoriser un type de fichier de façon ciblée
C’est la méthode recommandée : on déclare exactement le type voulu, pas davantage. Créez un fichier wp-content/mu-plugins/autoriser-types.php (ou ajoutez le code au functions.php d’un thème enfant). Cet exemple autorise les fichiers JSON pour les seuls administrateurs :
<?php
// wp-content/mu-plugins/autoriser-types.php
add_filter( 'upload_mimes', function ( $mimes ) {
if ( current_user_can( 'manage_options' ) ) {
$mimes['json'] = 'application/json';
}
return $mimes;
} );
// Le contrôle de contenu peut encore refuser le fichier : on le valide ici.
add_filter( 'wp_check_filetype_and_ext', function ( $data, $file, $filename, $mimes, $real_mime ) {
if ( ! empty( $data['ext'] ) && ! empty( $data['type'] ) ) {
return $data;
}
$ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
if ( 'json' === $ext && current_user_can( 'manage_options' ) ) {
return array( 'ext' => 'json', 'type' => 'application/json', 'proper_filename' => false );
}
return $data;
}, 10, 5 );
Adaptez l’extension et le type MIME à votre besoin. Le premier filtre inscrit le format dans la liste ; le second évite un rejet lorsque fileinfo détecte un type générique (text/plain, par exemple) qui ne correspond pas exactement. Pour le SVG, qui peut contenir du script, ne l’autorisez jamais sans nettoyage du fichier : notre article autoriser le SVG dans la médiathèque sans faille explique la méthode sûre. Pour comprendre la fonction de contrôle elle-même, voyez aussi vérifier l’extension d’un fichier avec wp_check_filetype().
4. Vérifier le rôle de l’utilisateur
Pour un fichier HTML ou JavaScript refusé à un auteur ou à un contributeur, c’est la capacité unfiltered_html qui manque : sur un site simple, seuls les rôles Administrateur et Éditeur la possèdent (elle est retirée à tous si la constante DISALLOW_UNFILTERED_HTML est définie, et, sur multisite, à tous sauf aux super-administrateurs). Faites téléverser le fichier par un compte autorisé plutôt que d’élargir les droits.
5. Multisite : compléter la liste du réseau
Dans l’administration du réseau, ouvrez Réglages, Paramètres du réseau, puis complétez « Types des fichiers téléversés » en séparant les extensions par des espaces (par exemple jpg jpeg png gif pdf). Cette liste restreint celle du cœur : elle sélectionne, parmi les types déjà autorisés, ceux dont l’extension y figure.
6. Dernier recours : désactiver le contrôle
La constante ALLOW_UNFILTERED_UPLOADS supprime tout contrôle de type pour les administrateurs. Sauvegardez d’abord le site, et n’utilisez ce réglage que de manière temporaire :
// wp-config.php, avant « That's all, stop editing! »
define( 'ALLOW_UNFILTERED_UPLOADS', true );
Effectuez votre téléversement, puis supprimez immédiatement la ligne. Laisser cette constante active permet de déposer un fichier PHP dans la médiathèque et ouvre la porte à une prise de contrôle du site ; notre article sur le blocage des fichiers exécutables dans un formulaire montre les conséquences. Sans accès à l’administration, toutes ces modifications se font par SFTP ou depuis le gestionnaire de fichiers de l’hébergeur.
Prévenir l’erreur
- Autorisez les types au cas par cas avec
upload_mimes, réservez-les aux rôles qui en ont besoin et documentez chaque ajout. - Faites nettoyer tout fichier pouvant contenir du code (SVG notamment) avant de l’accepter.
- Exportez les fichiers dans des formats courants plutôt que de renommer leurs extensions.
- N’activez jamais
ALLOW_UNFILTERED_UPLOADSde façon permanente en production. - Passez en revue les extensions de formulaire qui acceptent des téléversements : voir notre checklist de sécurisation des téléversements REST.
FAQ
Pourquoi WordPress refuse-t-il les fichiers SVG par défaut ?
Un SVG est un document XML qui peut contenir du JavaScript. Accepté tel quel, il permettrait d’injecter du code exécuté dans le navigateur des visiteurs. Il faut donc l’autoriser explicitement et le nettoyer à l’envoi.
Puis-je renommer mon fichier pour le faire accepter ?
Non, sauf s’il s’agit d’une vraie conversion. WordPress compare le contenu du fichier à l’extension : un fichier renommé est refusé, ou la fausse extension est corrigée pour certaines images.
Le filtre upload_mimes suffit-il toujours ?
Pas toujours. Si le contrôle de contenu détecte un type différent de celui que vous avez déclaré, le fichier reste refusé. Dans ce cas, validez-le aussi avec le filtre wp_check_filetype_and_ext, comme dans l’exemple ci-dessus.
Le message est-il lié à la taille du fichier ?
Non. Une limite de taille produit d’autres messages, par exemple « dépasse la limite de téléversement de ce site ». Ici, c’est le type ou le contenu du fichier qui est en cause.