Skip to content

Tutto per WordPress, lo sviluppo web — e non solo

🔧 WP All Import: come raccogliere tutte le immagini dei post in un'unica galleria

🔧 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_image a functions.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:

1http://newsite.com/files/photo1.jpg
2http://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ì:

Interfaccia impostazioni immagini di WP All Import

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 |:

1http://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:

1function 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}
15add_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:

1function 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}
17add_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"):

1function 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}
16add_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="..."]:

1function 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:// o https://) e portare direttamente a un file immagine, non a una pagina HTML. Verifica i permessi di scrittura per wp-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 ha http://oldsite.com/img.jpg, e a Immagini viene passato http://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_post carica il server: mille articoli generano mille chiamate a save_post. Per volumi fino a 100 articoli, la differenza è trascurabile, ma per grandi migrazioni l'hook fa risparmiare ore. Inoltre, pmxi_gallery_image dà 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 a save_post o 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 di preg_replace per 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.