Jérémie Bresson m’a contacté il y a quelques semaines avec une idée d’article en tête. Idée tirée directement de son expérience de WordPress, il me dit que ça pourrait intéresser la communauté de Fran6art. Jérémie a donc écrit 2 articles qui vont paraître à quelques jours d’intervalle, et qui portent sur la gestion des pièces jointes sur WordPress. On en parle finalement peu, mais les options tournant autour de la média library peuvent être très utiles !
Depuis WordPress 2.5 la gestion des fichiers joints a été largement améliorée grâce à la Media Library (voir la vidéo de présentation au moment de la bêta 2.5). Cet article a pour objectif de vous donner quelques clés pour comprendre la gestion des pièces jointes dans WordPress.
1. Joindre un fichier
Concrètement, l’association d’un fichier (image, vidéo, fichier pdf, archive zip ou autre) est à portée de clic depuis l’éditeur WordPress. Le gestionnaire de fichiers est vraiment très intuitif et permet d’associer à chaque article un ou plusieurs fichiers :

Légende : Gestionnaire de fichier flash
Pour l’utilisateur final, ajouter un fichier à un article se fait en quelques clics, pourtant savoir ce qui se passe en coulisse est nécessaire pour bien gérer son blog.
D’un point de vue technique, les fichiers sont transférés sur le serveur dans un sous-dossier de dossier_wordpress/wp-content/upload/. Lorsque l’on fait une sauvegarde sur son blog (ce qu’il faut faire régulièrement), on prendra bien soin de garder également une copie du contenu de ce dossier upload. Ne conserver qu’une copie de la base de données ne suffira pas à réinstaller complètement son blog (rechercher des fichiers peut prendre du temps).
Les informations associées aux fichiers sont stockées dans la base de données, de la même manière que les articles (dans la même table pour être précis). Cela explique que les pages décrivant les pièces jointes soient si proches des pages des articles. Il est important de connaître la concordance des champs avec ceux d’un article pour bien renseigner le formulaire qui accompagne chaque pièce jointe dans le gestionnaire de fichiers :
- le titre de la pièce jointe est correspond au champ du titre (post_title)
- la description du fichier correspond au contenu de l’article (post_content).
- la légende correspond au résumé de l’article (post_excerpt).
- l’adresse du fichier est stockée comme l’url de l’article (guid)
Pour chaque pièce jointe, il est possible de créer un lien directement vers le fichier, mais aussi de faire un lien vers une page de description de cette pièce jointe. Cette page est accessible à une adresse du type www.monsite.com/wordpress/?attachment_id=21 (avec les permaliens par défaut). Si les permaliens avancés sont utilisés, une adresse plus sophistiquée est utilisée.
Utiliser une page de description peut servir à apporter une information complémentaire au lecteur et lui éviter, par exemple, le téléchargement d’une grosse pièce jointe. Nous allons maintenant étudier l’organisation et les spécificités des templates qui régissent ces pages.
2. Fonctionnement des templates pour les pièces jointe
2.1. Hiérarchie des templates :
La personnalisation des pages d’un thème repose sur un système de templates.
Les différents templates sont organisés de manière hiérarchique, si un template n’est pas présent, le template générique suivant est utilisé.

Légende : Diagramme d’organisation des templates pour les pièces jointes
Il est possible de créer un template par type de fichier (image.php, video.php, audio.php, application.php - c’est basé sur le type MIME : il est possible de créer un template par type principal MIME)
À défaut de la présence d’un de ces templates, un template générique pour toutes les pièces jointes est utilisé : il s’agit de attachment.php.
Un niveau en dessous, si rien n’a été prévu pour les pièces jointes (cela peut-être le cas pour les vieux thèmes) ce sont les templates single.php puis à défaut index.php qui sont utilisés.
2.2. Particularité avec les templates index.php et single.php :
On l’a vu plus haut, la description de la pièce jointe correspond au contenu des articles. Autrement dit, dans les templates la fonction the_content() va afficher cette description de pièce jointe.
À un détail près : pour assurer une certaine compatibilité avec les thèmes qui n’auraient rien prévu pour les pièces jointes, la fonction the_content() n’affiche pas la même chose en fonction du template utilisé.
En effet dans single.php et index.php la fonction the_content() affiche une icône du fichier (ou un aperçu en cas d’image) puis la description. Cela permet de télécharger la pièce jointe.
Ce n’est pas le cas dans les autres templates qui sont plus spécifiques (attachment.php ainsi que les templates basé sur le type MIME comme image.php, video.php ou application.php). La fonction the_content() affiche juste la description (ce qui est finalement le comportement normal). L’affichage de la pièce jointe (icône ou aperçu) doit se faire à la main.
Dans la pratique, cela veut dire que si l’on veut créer un template attachment.php en dupliquant single.php, le nouveau template ne va pas afficher la même chose que l’ancien (même si ils sont identiques). Dans le template attachment.php, il faut utiliser des fonctions supplémentaires pour réaliser l’affichage des pièces jointes (l’icône du fichier par exemple). Cela permet également plus de personnalisation.
A suivre: un exemple pratique !!





Très bon article, merci. J’attends la suite pour des fichiers d’exemples !
Très intéressant, vivement la suite, j’espère que tu vas parler des plugins pour gérer l’upload de fichiers utilisateurs
La partie 2 traite de la création d’un template attachment.php et elle est pratiquement terminée…
Je n’ai pas prévu de partie 3 sur les plugins d’upload (le sujet me semble intéressant, mais pour le moment je n’y a pas été confronté…).
Jérémie
Intéressant en effet.
Le cas pratique devrait m’intéresser pas mal je pense.
Notamment pour la personnalisation de la page affichant l’image individuelle issue d’une galerie par exemple.
Et cela me fait penser aussi qu’il faudrait que l’on puisse attribuer des tags aux images… ca pourrait être pratique
Par défaut, et quelque soit le thème que j’ai pu testé, il n’y a pas d’icône à côté de ma pièce jointe lorsqu’il s’agit d’un fichier (pdf, office…). Je ne vois que le lien (cliquable et téléchargeable, c’est déjà ça). Comment faire pour avoir l’icône en plus, voir n’avoir que l’icône ?
Merci en tout cas d’aborder ce sujet encore peu exploré !
Effectivement, depuis que j’ai écrit cet article, je ne suis pas parvenu à avoir tout le temps
l’icône. (Peut-être s’agissait-il d’une fonction cachée du thème testé, ou d’une erreur d’inattention de ma part…)
Je suis entièrement d’accord que je devrais changer l’article pour dire que c’est un lien simple que l’on voit avec les templates single.php ou index.php
La partie 2 de l’article est de toute façon consacrée à l’adaptation d’un thème pour avoir une belle page de pièce jointe. Je pars d’une copie de single.php que je renomme attachment.php et je la modifie en conséquence (information sur l’article principal, icône pour les fichiers, aperçus pour les images, et navigation “pièce jointe précédente” - “pièce jointe suivante”)
Concernant les icones, je n’ai pas tout a fait la reponse a votre question.
Dans cet article, je donne un debut de reponse d’un point de vue developpement.
Jeremie, bravo pour l’article qui decrit de facon tres claire comment WordPress considere, et gere les pieces jointes.