Modifier le chemin des médias sous WordPress 3.5

Mis à jour le :

Les nouvelles installations de WordPress à partir de la version 3.5 ne disposent plus de l’option permettant de définir manuellement le dossier de stockage des médias envoyés depuis l’éditeur et donc, l’URL des fichiers médias.

Une telle option n’a pas disparu pour autant du CMS, ce tutoriel vous montrera comment faire pour la configurer à nouveau. Pour utilisateurs avertis uniquement.

Ces deux réglages existent toujours en base de données (options upload_path et upload_url_path) et WordPress les applique encore. Mais les champs Stocker les téléversements dans ce dossier et Adresse web complète pour les fichiers ne s’affichent dans Réglages > Médias que si l’un d’eux contient déjà une valeur différente de celle par défaut, par exemple sur un site configuré avant WordPress 3.5. Sur une installation standard, la section Téléversement des médias se limite à une case à cocher.

Écran Réglages > Médias de WordPress (titre Réglages des médias) : section Tailles des images avec Taille des miniatures 150 × 150 et la case de recadrage cochée, Taille moyenne 300 × 300 et Grande taille 1024 × 1024, puis section Téléversement des médias réduite à la seule case « Organiser mes téléversements dans des dossiers mensuels et annuels », cochée, au-dessus du bouton Enregistrer les modifications ; le menu latéral montre Réglages ouvert sur Médias.
Sur une installation récente, la section Téléversement des médias ne propose plus que le classement des fichiers par mois et par année

Par défaut, WordPress stocke les médias dans le dossier /wp-content/uploads et les classe dans des sous-dossiers par année puis par mois tant que la case Organiser mes téléversements dans des dossiers mensuels et annuels est cochée, ce qui est le cas sur une nouvelle installation. C’est ce que je recommande.

Pour changer de dossier, connectez-vous à votre serveur FTP à l’aide de votre client FTP favori. À la racine de votre installation WordPress, modifiez le fichier wp-config.php avec un éditeur de texte. La constante UPLOADS s’ajoute au-dessus de la ligne /* C’est tout, ne touchez pas à ce qui suit ! Bonne publication. */ (/* That's all, stop editing! Happy publishing. */ sur une installation en anglais). Elle fonctionne sur toutes les installations, récentes ou non, et l’emporte sur les deux réglages évoqués plus haut.

Pour définir l’emplacement de stockage dans le dossier /wp-content/medias, ajoutez cette ligne :

define( 'UPLOADS', 'wp-content/'.'medias' );

Au contraire, si vous comptez placer le dossier à la racine de votre installation WordPress afin d’obtenir des adresses plus courtes (/medias/ au lieu de /wp-content/uploads/), indiquez ceci :

define( 'UPLOADS', ''.'medias' );

Dans les deux cas, le chemin est relatif au dossier d’installation de WordPress (celui qui contient wp-admin et wp-includes) et l’adresse des fichiers en découle : https://www.votresite.fr/medias/ pour le second exemple. N’y mettez ni barre oblique au début, ni chemin absolu du serveur, sous peine d’adresses erronées. Si WordPress est installé dans un sous-dossier, le dossier des médias s’y trouve aussi.

Sauvegardez le fichier modifié puis envoyez un fichier dans votre médiathèque pour tester l’effectivité du changement : WordPress crée lui-même le dossier s’il n’existe pas. S’il n’y parvient pas, il affiche le message « Impossible de créer le dossier… Son dossier parent est-il accessible en écriture par le serveur ? », signe d’un problème de droits sur le serveur. Dans ce cas, contactez votre hébergeur.

De prime abord, certains utilisateurs percevront ce changement comme un retour en arrière… en réalité, cette modification est largement justifiée (cf. WordPress trac). Un avis que je partage d’autant plus qu’une telle option peut casser un site en 2 secondes.

Et les médias déjà envoyés ?

La constante ne déplace aucun fichier : ceux déjà envoyés restent dans /wp-content/uploads. Or WordPress enregistre l’emplacement de chaque média par rapport au dossier des médias (sous la forme année/mois/photo.jpg) : dès le changement, il les cherche dans le nouveau dossier et leurs vignettes disparaissent de la médiathèque. Les adresses insérées dans vos contenus, elles, sont complètes et pointent toujours vers l’ancien dossier.

Pour garder un site cohérent, faites d’abord une sauvegarde complète (fichiers et base de données). Déplacez ensuite le contenu de /wp-content/uploads dans le nouveau dossier en conservant ses sous-dossiers, puis remplacez l’ancienne adresse par la nouvelle dans la base de données avec WP-CLI :

wp search-replace 'https://www.votresite.fr/wp-content/uploads/' 'https://www.votresite.fr/medias/' --skip-columns=guid --dry-run

Avec --dry-run, la commande affiche le nombre de remplacements par table sans rien modifier : relancez-la sans cette option une fois le résultat vérifié. wp search-replace gère les données sérialisées (réglages d’extensions, par exemple), et --skip-columns=guid laisse intacts les identifiants uniques des contenus, qui ne doivent jamais changer. Videz ensuite le cache de votre site s’il en utilise un.

Sur un réseau multisite

Sur un réseau multisite créé depuis WordPress 3.5, la constante vaut pour tout le réseau : le site principal utilise le dossier indiqué, et chacun des autres sites un sous-dossier sites suivi de son identifiant (par exemple medias/sites/2). La section Téléversement des médias n’apparaît d’ailleurs pas dans les réglages des sites d’un réseau. Si votre réseau fonctionne en sous-répertoires, gardez le dossier dans wp-content (premier exemple) : les règles de réécriture fournies pour ce type de réseau ne servent les fichiers des sites secondaires que dans wp-content, wp-admin et wp-includes, et leurs médias seraient introuvables ailleurs.

Placer les médias hors de WordPress ou sur un sous-domaine

Avec la constante UPLOADS, le chemin part toujours du dossier de WordPress et l’adresse des fichiers de celle du site. Pour stocker les médias ailleurs sur le serveur et les servir depuis un sous-domaine, utilisez plutôt le filtre upload_dir dans une extension « must-use », un fichier PHP à déposer dans le dossier /wp-content/mu-plugins :

<?php
/**
 * Plugin Name: Custom uploads location
 * Description: Stores uploads outside the WordPress folder and serves them from a dedicated domain.
 */

defined( 'ABSPATH' ) || exit;

// Replace both values with your own folder (absolute path) and address, without a trailing slash.
function wpc_custom_upload_dir( $uploads ) {
	$basedir = '/home/votrecompte/medias';
	$baseurl = 'https://medias.votresite.fr';

	$uploads['path']    = $basedir . $uploads['subdir'];
	$uploads['url']     = $baseurl . $uploads['subdir'];
	$uploads['basedir'] = $basedir;
	$uploads['baseurl'] = $baseurl;

	return $uploads;
}
add_filter( 'upload_dir', 'wpc_custom_upload_dir' );

Remplacez les deux valeurs par le chemin absolu du dossier sur votre serveur et par l’adresse qui le sert, sans barre oblique finale. Le sous-domaine doit déjà pointer vers ce dossier : c’est un réglage de votre hébergement. Une extension « must-use » est toujours active, quel que soit le thème : les adresses de vos médias ne dépendent donc pas d’un changement de thème. Comme avec la constante, les médias déjà envoyés doivent être déplacés et leurs adresses remplacées. Enfin, ce code est prévu pour un site unique : sur un réseau multisite, tous les sites partageraient ce dossier, et la suppression d’un site effacerait les médias de tous les autres.

Pour mieux classer vos fichiers dans l’administration, apprenez à organiser votre bibliothèque de médias en dossiers.

Avatar de Aurélien Denis

Protégez votre site WordPress

Vos données sont précieuses,
ne prenez pas le risque de tout perdre.
Confiez-moi votre maintenance !

Ces articles devraient t’intéresser…

36 réponses

  1. Avatar de Herm
    Herm

    Bonsoir
    J’utilise Tutor lms pro et je voudrais que l’utilisateur puisse utiliser un autre gestionnaire de media autre que celui par défaut de WordPress
    Comment faire une chose pareille

  2. Avatar de Hera
    Hera

    Bonjour. J’ai un souci. Et je voudrais que vous m’aidiez.
    En fait, je ne suis pas un développeur. Mais, je veux créer un site web. J’ai acheté et hébergé mon nom de domaine chez OVH. J’ai installé manuellement wordpress. J’ai réussi à créer ma base de données. J’ai créer le click1 module.

    Maintenant, là où j’ai de souci, en créant le module, au niveau de la dernière ou l’avant dernière étape j’ai pas modifié le champ (Installation path) qui, par défaut a affiché : www/mon nom d’identification chez OVH

    Et actuellement, le chemin d’accès à mon site ne me plaît : nomdedomaine.com/nomd’identificationchezovh.

    Comment modifier cela pour que dans la barre d’adresse, « nomdedomaine.com » suffise à accéder à mon site?

    Merci de me répondre.

  3. Avatar de Roulien
    Roulien

    Bonjour,
    je me permets de poster ma question ici, en rapport avec la gestion des images.
    Je travail sous WordPress avec boutique Woocommerce. Le but est d’afficher des articles avec descriptifs et photos (rien de plus basique)
    Afin de faciliter mes mise à jours de produits dans la boutique, j’aimerais mettre mes visuels dans un dossier différent des images/médias du site de base, et d’éviter de les « noyer » avec tous les médias du site.
    J’ai bien essayé de créer un sous-dossier dans Upload ou de le mettre directement dans wp-content (via mon client FTP), mais à chaque fois que je fais mon transfert de produits avec la nouvelle URL (en CSV), Woocommerce me signale « Erreur d’obtention de l’image distante » et je n’ai pas de visuel lorsque je consulte mon produit.
    Je cherche depuis quelques temps une solution, mais je ne vois rien à ce propos. J’ai bien peur que cela soit impossible, mais j’aimerais en avoir la certitude.
    Merci par avance pour votre réponse.

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Il n’est pas possible de modifier la façon dont est gérée le stockage des fichiers sur le serveur. Néanmoins, une extension que j’apprécie particulièrement comme WP Media Folder permet la création de dossiers virtuels en back-office. Je l’utilise pour de nombreux projets avec succès.

      1. Avatar de Roulien
        Roulien

        Bonjour Aurélien,
        Merci pour ce retour concret. Je teste et vous retient au courant.

  4. Avatar de Aurélie
    Aurélie

    bonjour, Merci pour cette astuce, cependant c’est dommage que vous n’indiquiez pas une méthode pour changer les liens de l’ensemble des images déjà postées, en effet tout les images des articles publiés avant ce changement pointent vers une mauvaise adresse, résultat, l’ensemble du blog n’a plus d’image affichée…. 🙁 Je me suis rendue dans la base de donnée mais je n’ai pas trouvé l’endroit où l’on pouvait modifier ce reglage, ou bien y’a t-il une requette sql a programmer pouvez vous m’aider, merci

    1. Avatar de Aurélien Denis
      Aurélien Denis

      La <a href= »https://wpchannel.com/wordpress/tutoriels-wordpress/22-requetes-mysql-indispensables-wordpress/ »>requête 18</a> devrait faire l’affaire. Dans tous les cas, sauvegardez votre base de données !

  5. Avatar de audreyscarpentier
    audreyscarpentier

    Bonjour, J’ai la version 3.8.1 de WP, j’aimerais mettre mes images à la racine du site dans un dossier « images », je dois les mettre dans le dossier « www » ou bien plus haut ? Si je les mets dans « www » je dois écrire ça dans wp-config ? : define( ‘UPLOADS’, ‘www/’.’images’ )
    Merci

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Le domaine pointe sur le dossier /www donc vous n’avez pas à indiquer cela dans la define. Idem que tout ce qui est visible sur le Web se place dans ce dossier et nulle part ailleurs. Attention aux anciennes images qui pourraient se trouver dans le dossier par défaut.

      1. Avatar de audreyscarpentier
        audreyscarpentier

        Merci j’ai donc écris define( ‘UPLOADS’,  ».’medias’ ); et j’ai crée un dossier « medias » dans mon www où j’ai mis des photos pour tester. Mais aucune ne s’affiche ! De plus, WP me décline l’image en 10 formats différents sur le serveur, alors que mes images sont déjà redimenssionées !

        1. Avatar de Aurélien Denis
          Aurélien Denis

          WordPress génère 3 tailles par défaut (miniature, moyenne et large) et conserve la taille originale à partir de laquelle sont générées les miniatures. Le thème peut en ajouter d’autres ce qui semble être votre cas.

          Pour la define, il faudrait voir concrètement avec les accès car là je ne peux pas vous aider davantage.

  6. Avatar de DavidB_iRiche.com
    DavidB_iRiche.com

    Bonsoir à tous,

    même question que JulienL, est-ce que ça fonctionne sous WP 3.7.1 ?

    Et n’existe-t-il pas un plugin pour faire la même chose sans risque pour les utilisateurs « moyennement » avertis ? 😉

    Merci de la réponse.

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Oui cette méthode est fonctionnelle. Toutefois, si vous ne parvenez pas à envoyer des fichiers il vous faudra vérifier les autorisations de lecture/écriture sur le dossier en question (CHMOD) via un client FTP.

      Contactez votre hébergeur pour en savoir plus sur ces restrictions.

      1. Avatar de Julien L.
        Julien L.

        Aurélien, David et à tous,
        Lors de l’ouverture de mon compte 1and1, j’avais opté pour un hebérgement windows. Or, le problème venait de là et il fallait choisir un hébergement Linux, même si je n’utilise rien en Linux, au contraire.
        Je n’ai eu aucun changement pour l’administration via WordPress, mais il m’a permis de transférer mes médias sans aucune contrainte.
        Le basculement de compte s’est fait suite à un appel téléphonique, en patientant 6 heures environ.
        Si cela vous arrive, n’oubliez pas de sauvegarder vos données personnels transférée via le serveur FTP, car vous repartirez de 0.
        Le « problème » paraît connu chez 1&1, car la solution m’a été proposée sans attendre.
        Je peux maintenant modifier les droits d’accès depuis le client FTP, alors qu’avant je ne pouvait pas y accéder.

        1. Avatar de Aurélien Denis
          Aurélien Denis

          WordPress est conçu pour tourner sur un serveur Linux. Un serveur Microsoft est supporté mais cela est plus contraignant à gérer.

  7. Avatar de Julien L.
    Julien L.

    Bonsoir Aurélien,
    Cette méthode s’applique-t-elle toujours à WordPress 3.7.1 ?
    Car dès l’installation de ce wordpress (je n’ai pas connu les anciennes), je n’ai jamais pu transférer un seul média.
    J’ai donc beaucoup cherché et suis tombé très rapidement sur ce tuto, en voulant changer le chemin et ainsi créer un nouveau dossier « médias ». A priori, je suis très bien tombé.
    Or, même en appliquant cette méthode, rien : que ce soit en transfert par l’intermédiaire de wordpess ou par mon client FTP.
    Merci par avance pour la réponse et merci pour tous les recherches et l’aide que vous m’apportez par le biais de ce site.

  8. Avatar de Dex
    Dex

    Bonjour,

    J’utilise le template geo place. Mais récemment j’ai eu un bug sur le chargement des images.

    Les images sont ne sont pas téléchargées dans le bon répertoire. J’obtiens ce type d’erreur:
    Image not found: http://www.sen-events.com/wp-content/uploads/2013/August/images-1377430565.jpg

    Merci de votre aide

  9. Avatar de Pingusgab
    Pingusgab

    Bonjour !
    Pouvez-vous me dire où se trouve l’emplacement des sites sous WP MU ? Car dans mon interface FTP je ne trouve pas le dossier correspondant au lien de mon site. (ex : sur un réseau basé sur example.com, avec un sous domaine

  10. Avatar de Modeste
    Modeste

    Bonsoir tout le monde,
    Juste pour poser une question en rapport avec cet article.
    Afin de rendre un site multi-langue(Français/Anglais) j’ai opté pour le mode multisite de WordPress. Mon souci actuel est la suivante : Les médias wordpress de chaque site sont stockés dans un dossier sous la forme  » wp-content/blogs.dir/#/Années/Mois ». J’ai alors fait des recherches pour essayer de trouver s’il existe un moyen pour faire en sorte que plusieurs sites partagent le même répertoire média. Les principales solutions proposées à savoir:
    – la méthode du « define(‘UPLOADS’,’NewPath’) » dont vous aviez parlez dans cet article et
    -la méthode du switch_to_blog(1) proposé par TheDeadMedic ici http://stackoverflow.com/questions/3202865/wordpress-3-multisite-with-same-medialibrary ne permettent pas vraiment un partage des médias entre les sites i.e qu’avec ces deux méthodes les médias supposés partager ne s’affichent que dans la bibliothèque média du site principal(suite à des test que j’ai réalisés).
    Je suis également tombé sur la discussion suivante : http://wordpress.org/support/topic/define-the-same-upload-folder-for-all-multisite-blogs dans laquelle « Ipstenu » disait que cela n’était pas encore possible(faire partager un dossier de média afin que plusieurs site l’utilise ) mais c’était cette discussion date de 2ans!

    Bref j’aimerais savoir s’il est possible ou s’il existe actuellement un moyen de résoudre ce problème.

    Merci

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Non en fait, je déconseille de concevoir un multilingue avec du multisite ce n’est pas du tout conçu pour cela. Pour faire du multilingue, rien de mieux que le plugin WPML.

      1. Avatar de Modeste
        Modeste

        D’accord merci.

  11. Avatar de samyOneKenobi
    samyOneKenobi

    Apparemment ça ne fonctionne pas chez moi. petit souci d’affichage. So comment faire lorsque les vignettes sont dans un dossier vignet et que le lien est du type : ../wp-content/uploads/vignet/vignet-travaux.jpg ???

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Le chemin du chemin est opérationnel pour les nouveaux médias envoyés uniquement.

  12. Avatar de martin
    martin

    Bonjour, je viens de changer le nom de mon répertoire wp-content via le plugin better wp security. Hors depuis, je n’ai que des erreur. Comment puis je revenir a mon wp-content ?

  13. Avatar de ailleurs
    ailleurs

    Bonjour Adrien,
    Je me permets de vous contacter car j ai un petit souci.
    Je suis sous OVH et les dossiers upload n affichent que 5000 images. Bien que les autres soient dedans on ne les voit pas.
    Donc forcement le cache ne marche pas 🙁 une horreur
    J aimerais savoir comment faire pour faire du dossier qui a 15 000 en faire 5 de 3 000 images mais que ca change les url aussi en base car je ne vais pas pouvoir me refaire tous les produits 🙁
    Auriez vous une idée ?

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Changez d’hébergeur pour une solution plus puissante et activez la classification mensuelle (ce qui n’aura d’impact que pour les prochaines images)…

  14. Avatar de Valérie
    Valérie

    J’ajouterais ceci:
    Quand je copiais le code pour installer à la racine, ça installe à la racine du WordPress. Comme j’installe habituellement mes sites dans un répertoire et que je voulais que mon répertoire d’images soit à l’extérieur de ce répertoire, voici mon code:
    define( ‘UPLOADS’, ‘../’.’fichiers_contenu’ );
    Le ‘../’ indiquant qu’on doit remonter d’un répertoire dans le chemin.
    Merci pour m’avoir montré la voie, ceci dit 🙂

  15. Avatar de kouami18
    kouami18

    Enfin je vais enlever le fameux « wp-content » dans l’adresse de mes images.
    Plus de 50% des images trouvées dans les serps de google images portent ce terme dans leur adresse.Une façon de dire, regarder je me sers de wordpress pour créer mon site .
    Merci pour le tuto

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Attention à bien déplacer les images et corriger les URLS dans la base de données si le changement intervient sur une installation existante de WordPress. 😉

      1. Avatar de Vivien
        Vivien

        Bonjour,

        J’ai un site wordpress et un sous domaine également en wordpress geré avec le multisite. J’ai un gros problème d’upload d’images, puis-je le régler avec cette méthode?
        Merci

  16. Avatar de Richard
    Richard

    Tuto intéressant, certes.

    Toutefois, par rapport à d’autres CMS, je trouve la gestion des médias dans WordPress assez basique. L’utilisant pour faire essentiellement des sites de type « vitrine », je désactive la création de dossiers mensuels et j’aurais aimé une vraie « gestion » d’un dossier medias, soit de pouvoir créer des sous-dossier dans le dossier medias racine. Ainsi mes photos ou autres auraient pu être placées dans des sous-dossiers tels que entreprise, produits, site (par exemple pour medias servant à illustrer le site)

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Une vraie gestion au sens où tu l’entends, signifierait une plus grande complexité de gestion pour bon nombre d’utilisateurs – et des soucis de droits pour les hébergeurs.

      Par contre, c’est tout l’objectif des plugins de faire cela. Et même si je n’ai pas de nom en tête, il me semble avoir testé par le passé ce que tu cherches.

      Sinon, en manuel, ça se fait aussi…

  17. Avatar de djibs
    djibs

    Julio a trouvé un plugin qui remait les deux champs

    http://wordpress.org/extend/plugins/wp-original-media-path/

  18. Avatar de Ddesign
    Ddesign

    Astucieux et très utile comme tous les tutos Wp Channel

  19. Avatar de Daniel Roch
    Daniel Roch

    Merci pour le tuto. As-tu creusé la question pour faire la même chose mais pour cette fois-ci déplacer le répertoire d’uploads sur un sous-domaine ou un autre nom de domaine ?

    1. Avatar de Aurélien Denis
      Aurélien Denis

      Non pas vraiment creusé mais ça me bien plus complexe pour le déplacer sur un sous-domaine. A mon avis, il doit falloir dupliquer les médias comme pour un CDN…