Recevoir un fichier envoyé depuis un formulaire ou l’écran d’ajout de média impose une série de vérifications avant de le laisser atterrir sur le serveur : type de fichier autorisé, taille, nom de fichier sécurisé, organisation dans les bons dossiers par année et par mois. WordPress ne laisse pas chaque extension réinventer cette logique : la fonction wp_handle_upload() et, plus haut niveau, media_handle_upload(), centralisent ce traitement pour tout code qui a besoin de recevoir un fichier.
Fonctionnement dans WordPress
Une fois le fichier validé et déplacé dans le dossier d’envois (wp-content/uploads), une entrée est créée dans la médiathèque via wp_insert_attachment(), puis les métadonnées de l’image (dimensions, tailles intermédiaires générées automatiquement) sont calculées par wp_generate_attachment_metadata(). Une extension qui construit son propre formulaire d’envoi, par exemple pour un espace membre, réutilise généralement cette même chaîne de fonctions plutôt que de manipuler le système de fichiers directement.
Exemple
if ( ! empty( $_FILES['fichier'] ) ) {
$resultat = wp_handle_upload( $_FILES['fichier'], [ 'test_form' => false ] );
if ( ! isset( $resultat['error'] ) ) {
echo esc_url( $resultat['url'] );
}
}
Pièges fréquents
- Les types de fichiers acceptés sont restreints par une liste blanche filtrable via
upload_mimes; ajouter un nouveau format (comme SVG) exige de le déclarer explicitement, avec les précautions de sécurité qui s’imposent. - La taille maximale d’envoi dépend aussi des réglages serveur PHP (
upload_max_filesize,post_max_size), qui peuvent limiter les fichiers avant même que WordPress n’intervienne.