
🔧 WP All Import : comment rassembler toutes les images d'un article dans une seule galerie
Vous avez importé une centaine d’articles via WP All Import, et les images se sont dispersées n’importe comment dans le contenu: étirées en pleine largeur à certains endroits, compressées contre le texte à d’autres, ou affichées en liens brisés ailleurs. Reprendre chaque article manuellement, c’est une soirée de perdue.
Il existe un moyen de tout rassembler dans une seule galerie. Automatiquement, sans retoucher le contenu à la main. La méthode fonctionne aussi bien pour des imports frais que pour des articles chargés il y a un mois. Voici deux approches: la plus simple (à la volée, via le hook pmxi_gallery_image) et la corrective (avec une mise à jour groupée). Les deux ont été testées sur WP All Import 4.9+.
💡 Aperçu rapide:
- Préparez votre CSV ou XML: les liens des images en URLs complètes, une par ligne
- Dans le modèle d’import, configurez la section Images et indiquez le champ qui contient les images
- Ajoutez le hook
pmxi_gallery_imagedansfunctions.php, la galerie s’assemble toute seule pendant l’import - Pour les articles déjà en ligne: une fonction qui remplace les
<img>par le shortcode de galerie, puis une mise à jour groupée
Comment préparer les images pour l’import
Avant de lancer l’import, les liens des images doivent être dans le bon format. WP All Import ne télécharge les images que si l’URL est complète, directe et pointe vers un fichier, pas vers une page HTML.
Imaginons que sur l’ancien site, la galerie ressemble à ceci:
1 <a href="/cache/images/photo1.jpg" data-lightbox="group:1" title="Photo 1"> 2 <img src="/cache/images/photo1_thumb.jpg" alt="Photo 1"> 3 </a> 4 <a href="/cache/images/photo2.jpg" data-lightbox="group:1" title="Photo 2"> 5 <img src="/cache/images/photo2_thumb.jpg" alt="Photo 2"> 6 </a>
Après parsing, dans le fichier CSV destiné à l’import, les liens doivent devenir des URLs complètes, une par ligne, sans enrobage HTML:
1 http://newsite.com/files/photo1.jpg 2 http://newsite.com/files/photo2.jpg
Où http://newsite.com est le domaine du site vers lequel vous importez. Point critique: si les liens sont relatifs ou pointent vers l’ancien domaine, WP All Import ne récupérera pas les fichiers et ne les téléchargera pas dans la médiathèque.
Les liens présents dans le corps de l’article doivent correspondre un à un avec ceux que vous fournissez au plugin pour le téléchargement. Sinon, après l’import, certaines balises <img> conserveront les anciennes URLs et ne seront pas intégrées à la galerie.
Configurer le modèle d’import dans WP All Import
Dans l’interface du plugin, allez dans le modèle d’import. La section principale ici est Images. Elle se présente ainsi:

Dans la section Images, indiquez le champ qui contient les liens des images. Il s’agit généralement d’une cellule CSV distincte (par exemple gallery_images), où les liens sont listés avec un séparateur, par défaut |:
1 http://newsite.com/files/photo1.jpg | http://newsite.com/files/photo2.jpg | http://newsite.com/files/photo3.jpg
WP All Import va parser la chaîne, télécharger chaque image et l’ajouter à la médiathèque WordPress. Mais pour l’instant, les images sont simplement attachées à l’article en tant que fichiers joints. Nous allons assembler la galerie séparément.
Vérifiez bien comment le plugin gère le téléchargement. Cliquez sur Aperçu et test, puis sur Lancer le test. Une coche verte en regard du nombre d’images signifie que tout est correctement configuré. Une croix rouge signifie qu’il faut vérifier les URLs: elles doivent être complètes et directes.
Avant de démarrer l’import, téléversez les fichiers image dans le dossier files à la racine du site, si le plugin récupère les images depuis le serveur et non depuis des URLs externes.
Comment assembler la galerie à la volée: le hook pmxi_gallery_image
La méthode la plus propre consiste à assembler la galerie directement pendant l’import. WP All Import fournit le hook pmxi_gallery_image, qui se déclenche pour chaque image téléchargée. Vous interceptez l’ID du fichier joint et l’enregistrez dans un champ meta de l’article, dans le format souhaité.
Trois variantes testées, à choisir selon votre thème ou votre plugin de galerie.
Variante 1: tableau d’IDs de fichiers joints. Convient à la plupart des thèmes qui attendent la galerie sous forme d’un tableau d’IDs:
1 function my_gallery_ids($post_id, $att_id, $filepath, $is_keep_existing_images) 2 { 3 $key = '_my_gallery'; 4 $gallery = get_post_meta($post_id, $key, true); 5 6 if (empty($gallery)) { 7 $gallery = array(); 8 } 9 10 if (!in_array($att_id, $gallery)) { 11 $gallery[] = $att_id; 12 update_post_meta($post_id, $key, $gallery); 13 } 14 } 15 add_action('pmxi_gallery_image', 'my_gallery_ids', 10, 4);
Variante 2: tableau d’URLs. Si le thème a besoin de liens directs vers les images en taille réelle:
1 function my_gallery_urls($post_id, $att_id, $filepath, $is_keep_existing_images) 2 { 3 $key = '_my_gallery'; 4 $size = 'full'; 5 $gallery = get_post_meta($post_id, $key, true); 6 7 if (empty($gallery)) { 8 $gallery = array(); 9 } 10 11 if (!isset($gallery[$att_id])) { 12 $src = wp_get_attachment_image_src($att_id, $size); 13 $gallery[$att_id] = $src[0]; 14 update_post_meta($post_id, $key, $gallery); 15 } 16 } 17 add_action('pmxi_gallery_image', 'my_gallery_urls', 10, 4);
Variante 3: chaîne avec séparateur. Si le champ meta stocke les IDs séparés par une virgule (format "23,25,31"):
1 function my_gallery_string($post_id, $att_id, $filepath, $is_keep_existing_images) 2 { 3 $key = '_my_gallery'; 4 $sep = ','; 5 $gallery = get_post_meta($post_id, $key, true); 6 7 if (is_string($gallery) || empty($gallery) || $gallery == false) { 8 $gallery = explode($sep, $gallery); 9 if (!in_array($att_id, $gallery)) { 10 if ($gallery[0] == '') unset($gallery[0]); 11 $gallery[] = $att_id; 12 update_post_meta($post_id, $key, implode($sep, $gallery)); 13 } 14 } 15 } 16 add_action('pmxi_gallery_image', 'my_gallery_string', 10, 4);
Le code s’insère dans le functions.php du thème. Une fois l’import terminé, le hook peut être supprimé, le champ meta est déjà rempli. Avantage de cette méthode: la galerie est prête immédiatement après l’import, sans passe supplémentaire.
Que faire avec les articles déjà importés
Si les articles sont déjà en ligne et que les images traînent dans le contenu sous forme de simples balises <img>, il faut une approche différente. Parcourez tous les articles et remplacez les balises par le shortcode de galerie.
La fonction ci-dessous collecte tous les IDs de fichiers joints d’un article et remplace les <img> dans le contenu par [gallery ids="..."]:
1 function replace_post_images_with_gallery($post_id) 2 { 3 $post = get_post($post_id); 4 if (!$post) return; 5 6 $attachments = get_attached_media('image', $post_id); 7 8 if (empty($attachments)) return; 9 10 $ids = array(); 11 foreach ($attachments as $att) { 12 $ids[] = $att->ID; 13 } 14 15 $gallery_shortcode = '[gallery ids="' . implode(',', $ids) . '"]'; 16 $content = preg_replace('/<img[^>]+>/i', '', $post->post_content); 17 $content = $gallery_shortcode . "\n\n" . $content; 18 19 wp_update_post(array( 20 'ID' => $post_id, 21 'post_content' => $content, 22 )); 23 }
Ensuite, lancez une mise à jour groupée:
- Dans le panneau d’administration, allez dans la liste de tous les articles.
- Dans les options de l’écran, réglez le nombre d’éléments à 50 (optimal pour ne pas faire planter le serveur).
- Sélectionnez tous les articles, choisissez «Mettre à jour» dans les actions groupées, puis appliquez.
WordPress va parcourir chaque article, appeler save_post et les hooks associés. Si la fonction dans functions.php est accrochée à save_post, elle s’exécutera. Une fois terminé, **supprimez le code de **functions.php, sinon, à chaque enregistrement d’article, le contenu sera reconstruit à nouveau.
⁉️🤔 Questions fréquentes
WP All Import** ne télécharge pas les images pendant l’import, qu’est-ce qui ne va pas?**
Les liens dans le fichier d’import doivent être des URLs complètes (avec
http://ouhttps://) et mener directement à un fichier image, pas à une page HTML. Vérifiez les droits d’écriture surwp-content/uploads: si le serveur ne peut pas enregistrer le fichier, l’import de l’image est silencieusement ignoré. La raison la plus fréquente est une discordance entre les liens dans le corps du contenu et ceux dans le champ Images du modèle. Si le contenu contienthttp://oldsite.com/img.jpg, et que le champ Images reçoithttp://newsite.com/files/img.jpg, le plugin ne fera pas le lien et l’image restera cassée. Les URLs doivent correspondre une à une.
Pourquoi pmxi_gallery_image est-il préférable à un traitement post-import?
Le hook se déclenche pour chaque image au moment du téléchargement, la galerie est prête juste après l’import, sans seconde passe. Le traitement post-import via
wp_update_postsollicite le serveur: mille articles génèrent mille appels àsave_post. Pour des volumes jusqu’à 100 articles, la différence est négligeable, mais pour de grosses migrations, le hook fait gagner des heures. De plus,pmxi_gallery_imagedonne accès au chemin du fichier téléchargé et à l’ID du fichier joint, vous pouvez immédiatement programmer n’importe quelle logique: répartir par dossiers, ajouter à un slider, synchroniser avec un CDN. Le post-import n’offre pas cette flexibilité.
Est-il obligatoire de supprimer le code de functions.php après l’import?
Oui. Si la fonction est accrochée à
pmxi_gallery_image, elle se déclenche à CHAQUE ajout de fichier joint, résultat: des doublons dans le champ meta de la galerie lors d’un téléversement manuel d’images. Le hook s’exécute une fois, une fois l’import terminé, il peut être supprimé sans risque. Si la fonction est liée àsave_postou utilisée dans une mise à jour groupée, il est d’autant plus important de la supprimer. Sinon, chaque modification d’article reconstruira le contenu, supprimant les balises<img>et réécrivant la galerie.
Comment laisser certaines images en dehors de la galerie?
Excluez-les du remplacement. Dans la variante avec
pmxi_gallery_image, ajoutez une condition basée sur la taille ou le texte alternatif. Dans la variante post-import, au lieu d’unpreg_replacesur tous les<img>, utilisez un remplacement sélectif: conservez les images ayant une classe CSS ou un attribut spécifique, supprimez les autres et remplacez-les par la galerie. Par exemple,<img class="keep">reste dans le contenu, tous les autres<img>sont remplacés par[gallery]. Cela se résout en affinant l’expression régulière dans la fonction de remplacement.
Faut-il WP All Import Pro ou la version gratuite suffit-elle?
La version gratuite peut importer des images dans la médiathèque et les attacher à un article. Le hook
pmxi_gallery_imagey est également disponible. La version Pro ajoute: le chargement d’images depuis des URLs externes, les imports Cron planifiés, l’exécution de fonctions PHP directement dans le modèle d’import, et la prise en charge des champs personnalisés. Pour un import ponctuel avec des fichiers locaux, la version gratuite est largement suffisante. La version Pro est nécessaire quand les images sont sur un serveur tiers et que vous ne voulez pas les télécharger manuellement, ainsi que pour les champs ACF, l’import WooCommerce et le travail avec des types de contenu personnalisés.
Quelle méthode choisir pour votre projet
Si vous planifiez un import, assemblez la galerie à la volée via pmxi_gallery_image. Plus rapide, plus propre et sans double charge sur le serveur. L’une des trois variantes ci-dessus fonctionne: le choix dépend du format de galerie attendu par votre thème ou votre plugin.
Si les articles sont déjà en ligne et que les images sont dispersées dans le contenu, prenez la fonction qui remplace les <img> par [gallery] et lancez une mise à jour groupée. Pour de petits volumes (jusqu’à 200 articles), cela prendra quelques minutes. Pour des milliers d’articles, il est plus sage de fractionner par lots de 50.
WP All Import lui-même est l’un des importateurs les plus flexibles pour WordPress. Plus de 200 000 installations actives, la version gratuite sur WordPress.org couvre la plupart des tâches de migration. Et la version Pro lève les dernières limitations sur les URLs externes et les imports Cron. Essayez-la.



