
🔧 WP All Import: come raccogliere tutte le immagini dei post in un'unica galleria
Importato un centinaio di articoli con WP All Import e le immagini si sono sparse nel contenuto in modo casuale: allargate a tutta larghezza in alcuni punti, schiacciate contro il testo in altri, e altrove compaiono come link non funzionanti. Passare ogni articolo a mano è una serata buttata.
C'è un modo per raccogliere tutto in un'unica galleria. Automaticamente, senza modificare i contenuti a mano. Il metodo funziona sia per importazioni fresche sia per articoli caricati un mese fa. Qui sotto trovi due approcci: quello semplice (al volo, tramite l'hook pmxi_gallery_image) e quello a posteriori (con aggiornamento di massa). Entrambi testati su WP All Import 4.9+.
💡 Panoramica rapida:
- Prepara CSV o XML: link delle immagini come URL completi, uno per riga
- Nel template di importazione, configura la sezione Immagini e specifica il campo con le immagini
- Aggiungi l'hook
pmxi_gallery_imageafunctions.php, la galleria si assembla da sola durante l'importazione - Per gli articoli vecchi: una funzione per sostituire i tag
<img>con lo shortcode della galleria e aggiornamento di massa
Come preparare le immagini per l'importazione
Prima di avviare l'importazione, i link delle immagini devono essere nel formato corretto. WP All Import scarica le immagini solo se l'URL è completo, diretto e punta a un file, non a una pagina HTML.
Mettiamo che sul vecchio sito la galleria abbia questo aspetto:
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>
Dopo il parsing, nel file CSV per l'importazione, i link devono diventare URL completi, uno per riga, senza involucro HTML:
1 http://newsite.com/files/photo1.jpg 2 http://newsite.com/files/photo2.jpg
Dove http://newsite.com è il dominio del sito su cui stai importando. Critico: se i link sono relativi o puntano al vecchio dominio, WP All Import non preleverà i file e non li caricherà nella libreria media.
I link nel corpo dell'articolo devono corrispondere uno a uno con quelli che fornisci al plugin per il caricamento. Altrimenti, dopo l'importazione, alcuni tag <img> rimarranno con i vecchi URL e non saranno inclusi nella galleria.
Configurare il template di importazione in WP All Import
Nell'interfaccia del plugin, vai al template di importazione. La sezione principale qui è Immagini. Si presenta così:

Nella sezione Immagini, specifica il campo che contiene i link delle immagini. Di solito è una cella CSV separata (per esempio, gallery_images), dove i link sono elencati con un separatore, di default |:
1 http://newsite.com/files/photo1.jpg | http://newsite.com/files/photo2.jpg | http://newsite.com/files/photo3.jpg
WP All Import analizzerà la stringa, scaricherà ogni immagine e la aggiungerà alla libreria media di WordPress. Ma per ora le immagini sono solo allegate all'articolo come attachment. La galleria la assembleremo a parte.
Assicurati di verificare come il plugin gestisce il caricamento. Clicca Anteprima e test, poi Esegui test. Un segno di spunta verde accanto al numero di immagini significa che tutto è configurato correttamente. Una croce rossa significa che devi controllare gli URL: devono essere completi e diretti.
Prima di avviare l'importazione, carica i file immagine nella cartella files nella root del sito, se il plugin prende le immagini dal server e non da URL esterni.
Come assemblare la galleria al volo: hook pmxi_gallery_image
Il modo più pulito è assemblare la galleria direttamente durante l'importazione. WP All Import fornisce l'hook pmxi_gallery_image, che si attiva per ogni immagine caricata. Intercetti l'ID dell'attachment e lo salvi nel campo meta dell'articolo nel formato desiderato.
Tre varianti testate, scegli in base al tuo tema o plugin per gallerie.
Variante 1: array di ID attachment. Adatta alla maggior parte dei temi che si aspettano la galleria come array di ID attachment:
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: array di URL. Se il tema ha bisogno di link diretti alle immagini a piena risoluzione:
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: stringa con separatore. Se il campo meta memorizza gli ID separati da virgola (formato "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);
Il codice si inserisce nel functions.php del tema. A importazione completata, l'hook può essere rimosso, il campo meta è già popolato. Vantaggio di questo metodo: la galleria è pronta subito dopo l'importazione, senza passaggi aggiuntivi.
Cosa fare con gli articoli già importati
Se gli articoli sono già stati caricati e le immagini sono sparse nel contenuto come normali tag <img>, serve un approccio diverso. Scorri tutti gli articoli e sostituisci i tag con lo shortcode della galleria.
La funzione qui sotto raccoglie tutti gli ID attachment di un articolo e sostituisce i tag <img> nel contenuto con [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 }
Poi esegui un aggiornamento di massa:
- Nel pannello di amministrazione, vai all'elenco di tutti gli articoli.
- Nelle opzioni schermo, imposta il numero di elementi a 50 (ottimale per non mandare in crash il server).
- Seleziona tutti gli articoli, scegli "Aggiorna" nelle azioni di massa e applica.
WordPress scorrerà ogni articolo, chiamando save_post e gli hook correlati. Se la funzione in functions.php è agganciata a save_post, verrà eseguita. Al termine, **rimuovi il codice da **functions.php, altrimenti, a ogni salvataggio di un articolo, il contenuto verrà ricostruito di nuovo.
⁉️🤔 Domande frequenti
WP All Import** non scarica le immagini durante l'importazione, cosa c'è che non va?**
I link nel file di importazione devono essere URL completi (con
http://ohttps://) e portare direttamente a un file immagine, non a una pagina HTML. Verifica i permessi di scrittura perwp-content/uploads: se il server non può salvare il file, l'importazione dell'immagine viene saltata senza avvisi. Il motivo più comune è una mancata corrispondenza tra i link nel corpo del contenuto e quelli nel campo Immagini del template. Se il contenuto hahttp://oldsite.com/img.jpg, e a Immagini viene passatohttp://newsite.com/files/img.jpg, il plugin non li collegherà e l'immagine rimarrà non funzionante. Gli URL devono corrispondere uno a uno.
Perché pmxi_gallery_image è meglio del post-import?
L'hook si attiva per ogni immagine al momento del caricamento, la galleria è pronta subito dopo l'importazione, senza un secondo passaggio. Il post-import tramite
wp_update_postcarica il server: mille articoli generano mille chiamate asave_post. Per volumi fino a 100 articoli, la differenza è trascurabile, ma per grandi migrazioni l'hook fa risparmiare ore. Inoltre,pmxi_gallery_imagedà accesso al percorso del file caricato e all'ID attachment, puoi impostare subito qualsiasi logica: distribuire per cartelle, aggiungere a uno slider, sincronizzare con una CDN. Il post-import non offre questa flessibilità.
È necessario rimuovere il codice da functions.php dopo l'importazione?
Sì. Se la funzione è agganciata a
pmxi_gallery_image, si attiva per QUALSIASI aggiunta di attachment, il risultato: duplicati nel campo meta della galleria quando si caricano immagini manualmente. L'hook viene eseguito una volta sola, a importazione completata può essere rimosso senza problemi. Se la funzione è legata asave_posto usata nell'aggiornamento di massa, a maggior ragione va rimossa. Altrimenti, ogni modifica a un articolo ricostruirà il contenuto, rimuovendo i tag<img>e riscrivendo la galleria.
Come lasciare singole immagini fuori dalla galleria?
Escludile dalla sostituzione. Nella variante con
pmxi_gallery_image, aggiungi una condizione per dimensione o testo alternativo. Nella variante con post-import, invece dipreg_replaceper tutti i tag<img>, usa una sostituzione selettiva: lascia le immagini con una classe CSS o un attributo specifico, rimuovi il resto e sostituisci con la galleria. Per esempio,<img class="keep">rimane nel contenuto, tutti gli altri<img>sono sostituiti con[gallery]. Si risolve affinando la regex nella funzione di sostituzione.
Serve WP All Import Pro o basta la versione gratuita?
La versione gratuita può importare immagini nella libreria media e allegarle a un articolo. Anche l'hook
pmxi_gallery_imageè disponibile. La versione Pro aggiunge: caricamento di immagini da URL esterni, importazioni Cron pianificate, esecuzione di funzioni PHP direttamente nel template di importazione e supporto per campi personalizzati. Per un'importazione una tantum con file locali, la versione gratuita è più che sufficiente. La Pro serve quando le immagini sono su un server di terze parti e non vuoi scaricarle a mano, oltre che per campi ACF, importazione WooCommerce e lavoro con tipi di contenuto personalizzati.
Quale metodo scegliere per il tuo caso
Se stai solo pianificando un'importazione, assembla la galleria al volo con pmxi_gallery_image. Più veloce, più pulito e senza doppio carico sul server. Una qualsiasi delle tre varianti sopra funziona: la scelta dipende dal formato in cui il tuo tema o plugin si aspetta la galleria.
Se gli articoli sono già stati caricati e le immagini sono sparse nel contenuto, prendi la funzione per sostituire <img> con [gallery] ed esegui un aggiornamento di massa. Per piccoli volumi (fino a 200 articoli), ci vorranno un paio di minuti. Per migliaia di articoli, è più saggio suddividere in lotti da 50.
WP All Import stesso è uno degli importatori più flessibili per WordPress. Oltre 200.000 installazioni attive, la versione gratuita su WordPress.org copre la maggior parte delle attività di migrazione. E la versione Pro rimuove le ultime limitazioni su URL esterni e importazioni Cron. Provalo.



