Trasferire articoli da un sito WordPress all'altro può sembrare semplice, ma quando si tratta di migrare centinaia o migliaia di post mantenendo le immagini in evidenza (featured images), la situazione si complica rapidamente. La maggior parte delle soluzioni disponibili online richiede plugin premium costosi o non preserva tutti i metadati necessari per una migrazione completa.
In questa guida vi mostreremo un metodo gratuito e affidabile per migrare articoli WordPress in bulk, preservando tutte le immagini in evidenza, i metadati, i campi personalizzati, le tassonomie e le informazioni essenziali come autore e date di pubblicazione. Questa soluzione è stata sviluppata e testata dalla nostra agenzia per gestire migrazioni complesse senza dover ricorrere a strumenti a pagamento.
Prima di procedere con la migrazione, è importante verificare di avere tutto il necessario. Avrai bisogno di accesso amministrativo a entrambi i siti WordPress coinvolti nella migrazione. Inoltre, ti servirà un editor di testo per modificare file CSV come Excel, Google Sheets o LibreOffice Calc. È sempre consigliato effettuare un backup completo di entrambi i siti prima di iniziare qualsiasi processo di migrazione, per poter ripristinare tutto in caso di problemi imprevisti. Considera che l'intero processo richiederà circa 30-60 minuti, anche se il tempo effettivo dipenderà dal numero di articoli da trasferire e dalla velocità della tua connessione.
Riassumendo:
La nostra soluzione si basa su due plugin gratuiti disponibili nella repository ufficiale di WordPress. Questi strumenti ci permetteranno di esportare tutti i dati necessari dal sito di origine e importarli correttamente nel sito di destinazione.
Iniziamo il processo di migrazione esportando tutti i dati necessari dal sito di origine. Questa fase è cruciale perché determinerà quali informazioni saranno disponibili per l'importazione. È importante essere meticolosi nella selezione dei campi da esportare per non perdere dati importanti durante il trasferimento.
Accedi al pannello di amministrazione del sito WordPress da cui vuoi esportare gli articoli. Una volta dentro, dovrai installare il plugin di esportazione seguendo questi passaggi:
Ora che il plugin è installato, dobbiamo configurare esattamente cosa esportare. Questa fase richiede attenzione perché determinerà quali dati verranno trasferiti al nuovo sito. Il plugin ti presenterà un'interfaccia intuitiva dove potrai selezionare il tipo di contenuto e i campi specifici da includere nell'esportazione.
Inizia selezionando il tipo di contenuto da esportare. Puoi scegliere Posts per gli articoli standard, oppure selezionare un Custom Post Type specifico se il tuo sito ne utilizza. Il plugin ti permette anche di applicare filtri per esportare solo determinati articoli, per esempio quelli di una specifica categoria, pubblicati in un certo periodo o con un determinato stato di pubblicazione.
Quando configuri i campi da esportare, assicurati di includere tutti questi elementi essenziali:
Il passaggio più importante per il nostro metodo è aggiungere un campo speciale per l'immagine in evidenza. Per farlo, clicca su "Aggiungi campo" nell'interfaccia del plugin, poi seleziona "Featured Image URL" dalle opzioni disponibili. Nomina questo campo "featured_image_url" - questo nome è importante perché lo useremo successivamente per identificare le immagini. Il plugin esporterà l'URL completo di ogni immagine in evidenza, che useremo poi per scaricarle e importarle nel nuovo sito.
Una volta configurati tutti i campi necessari, è il momento di procedere con l'esportazione vera e propria. Clicca su "Conferma & Esegui Export" per avviare il processo. A seconda del numero di articoli, questo potrebbe richiedere alcuni minuti. Al termine, il plugin ti permetterà di scaricare il file CSV generato. Salva questo file in una posizione facilmente accessibile sul tuo computer, perché lo useremo nei passaggi successivi.
Con il file CSV pronto, possiamo ora procedere all'importazione degli articoli nel nuovo sito WordPress. Questa fase trasferirà tutti i contenuti testuali e i metadati, ma non ancora le immagini in evidenza - quelle le gestiremo nella fase successiva con il nostro metodo personalizzato.
Prima di iniziare l'importazione, dobbiamo preparare il sito di destinazione installando il plugin necessario. Accedi al pannello amministrativo del nuovo sito WordPress e installa WP All Import seguendo la stessa procedura usata per il plugin di esportazione. Una volta attivato, vai su "All Import → Nuova importazione" e carica il file CSV che hai esportato dal sito originale.
Questa è probabilmente la fase più delicata dell'intero processo. Il plugin ti mostrerà un'interfaccia dove dovrai "mappare" ogni colonna del tuo file CSV con il campo corrispondente in WordPress. In pratica, stai dicendo al plugin dove inserire ogni informazione che hai esportato.
Per le informazioni di base, la mappatura sarà relativamente semplice. Dovrai collegare il campo del titolo dal CSV con il campo titolo di WordPress, il contenuto con il contenuto, e così via. Per i metadati come autore e data di pubblicazione, assicurati di selezionare i campi corretti dalle opzioni disponibili. Le tassonomie come categorie e tag potrebbero richiedere un'attenzione particolare: verifica che vengano importate correttamente e che il plugin crei automaticamente categorie nuove se non esistono già nel sito di destinazione.
È importante notare che la versione gratuita del plugin non importerà le immagini in evidenza, anche se hai incluso gli URL nel CSV. Questo è normale e previsto - gestiremo le immagini nel passo successivo con il nostro script personalizzato.
Dopo aver verificato attentamente la mappatura di tutti i campi, puoi procedere con l'importazione vera e propria. Clicca su "Continua" e poi esegui l'importazione. Il plugin ti mostrerà una barra di progresso mentre importa gli articoli. Al termine del processo, avrai tutti i tuoi articoli nel nuovo sito, completi di contenuti e metadati, ma ancora senza le immagini in evidenza.
Arriviamo ora alla parte più innovativa della nostra soluzione.
Per prima cosa dobbiamo creare un file CSV specifico per le immagini. Apri il file CSV originale che hai esportato e crea un nuovo documento con solo le informazioni necessarie per le immagini. Questo nuovo file deve avere esattamente due colonne:
La prima colonna deve chiamarsi "slug" e contenere lo slug di ogni articolo. La seconda colonna deve chiamarsi "image_featured" e contenere l'URL completo dell'immagine in evidenza corrispondente. È fondamentale che i nomi delle colonne siano esattamente questi, perché lo script li cercherà con questi nomi specifici.
Salva questo nuovo file con il nome "featured-images.csv" e caricalo nella cartella del tuo tema child. Puoi farlo via FTP oppure usando il file manager del tuo hosting. Il percorso esatto sarà qualcosa come: wp-content/themes/nome-tuo-tema-child/featured-images.csv
<?php
/**
* Import Featured Image da CSV
* CSV con intestazioni: slug,image_featured
* Avvio: https://tuodominio.tld/?run_import_featured=1
*/
add_action('init', function () {
// Controllo sicurezza: verifica parametro GET e permessi amministratore
if (!isset($_GET['run_import_featured']) || !current_user_can('manage_options')) {
return;
}
// Configurazione limiti PHP per gestire grandi volumi
@set_time_limit(0);
@ini_set('auto_detect_line_endings', '1');
// Path del file CSV nella cartella del tema child
$csv_file = get_stylesheet_directory() . '/featured-images.csv';
if (!file_exists($csv_file)) {
wp_die("❌ CSV non trovato: $csv_file");
}
$delimiter = ','; // forziamo la virgola
// Apertura del file CSV
$fh = fopen($csv_file, 'r');
if (!$fh) {
wp_die("❌ Impossibile aprire il CSV.");
}
// Lettura e pulizia intestazioni (gestisce anche file con BOM)
$header = fgetcsv($fh, 0, $delimiter);
$header = array_map(function($h) {
$h = preg_replace('/^\xEF\xBB\xBF/', '', $h); // rimuove BOM
return strtolower(trim($h));
}, $header);
// Verifica presenza colonne obbligatorie
if (!in_array('slug', $header) || !in_array('image_featured', $header)) {
echo "<pre>Intestazioni lette:\n"; print_r($header); echo "</pre>";
fclose($fh);
wp_die("❌ Il CSV deve avere le colonne esatte: slug,image_featured");
}
$map = array_flip($header);
// Caricamento librerie WordPress necessarie per gestione media
if (!function_exists('media_sideload_image')) {
require_once ABSPATH . 'wp-admin/includes/media.php';
require_once ABSPATH . 'wp-admin/includes/file.php';
require_once ABSPATH . 'wp-admin/includes/image.php';
}
$ok = 0; $fail = 0;
echo "<pre>Inizio import...\n\n";
// Ciclo principale: processa ogni riga del CSV
while (($data = fgetcsv($fh, 0, $delimiter)) !== false) {
if (count($data) < count($header)) {
$fail++; echo "⚠️ Riga malformata, salto.\n"; continue;
}
// Estrazione e sanitizzazione dati dalla riga corrente
$slug = sanitize_title(trim($data[$map['slug']]));
$image_url = trim($data[$map['image_featured']]);
echo "➡️ Slug: {$slug}\n➡️ URL: {$image_url}\n";
if ($slug === '' || $image_url === '') {
$fail++; echo "❌ Dati mancanti, salto.\n\n"; continue;
}
// Ricerca del post tramite slug (funziona con tutti i post type pubblici)
$post = get_page_by_path($slug, OBJECT, get_post_types(['public' => true]));
if (!$post) {
$fail++; echo "❌ Nessun post trovato per slug: {$slug}\n\n"; continue;
}
$post_id = (int) $post->ID;
// Download e importazione immagine nella libreria media
$attach_id = media_sideload_image($image_url, $post_id, null, 'id');
if (is_wp_error($attach_id)) {
$fail++; echo "❌ Errore download: " . $attach_id->get_error_message() . "\n\n"; continue;
}
// Impostazione dell'immagine come featured image del post
set_post_thumbnail($post_id, $attach_id);
$ok++; echo "✅ Featured impostata (post ID: {$post_id}, attachment ID: {$attach_id}).\n\n";
}
// Chiusura file e report finale
fclose($fh);
echo "---\nCompletato. OK: {$ok} | Errori: {$fail}\n</pre>";
exit;
});
?>
Lo script deve essere aggiunto al sito WordPress di destinazione. Hai due opzioni per implementarlo, entrambe valide ma con caratteristiche diverse.
Questa opzione è la più semplice se hai già un tema child attivo. Accedi all'editor del tema dal pannello WordPress andando su Aspetto → Editor del tema. Seleziona il file functions.php del tema child e incolla lo script alla fine del file. Questa soluzione è rapida ma lo script rimarrà attivo finché non lo rimuovi.
Questa opzione è più pulita e professionale. I Must-Use plugin sono plugin speciali che WordPress carica automaticamente. Per creare un mu-plugin, accedi via FTP alla cartella wp-content del tuo sito. Se non esiste già, crea una nuova cartella chiamata "mu-plugins". All'interno di questa cartella, crea un nuovo file chiamato "import-featured-images.php" e incolla lo script al suo interno. Il vantaggio di questo metodo è che puoi facilmente rimuovere il file una volta completata l'importazione.
Con lo script installato e il file CSV nella cartella del tema child, sei pronto per avviare l'importazione delle immagini. Il processo è molto semplice ma richiede attenzione. Apri il tuo browser e visita l'URL del tuo sito aggiungendo il parametro speciale: https://tuodominio.com/?run_import_featured=1
Nota importante: devi essere loggato come amministratore per poter eseguire lo script. Questo è un controllo di sicurezza integrato per impedire esecuzioni non autorizzate.
Non appena visiterai questo URL, lo script si attiverà automaticamente e inizierà a processare il file CSV. Per ogni riga del file, lo script cercherà l'articolo corrispondente tramite lo slug, scaricherà l'immagine dall'URL specificato, la salverà nella libreria media di WordPress e la imposterà come immagine in evidenza dell'articolo.
Durante l'esecuzione vedrai un log dettagliato che ti informerà del progresso: quali immagini sono state importate con successo, quali articoli non sono stati trovati e se ci sono stati errori. Il tempo necessario dipende dal numero di immagini e dalla loro dimensione. Per migliaia di immagini potrebbe essere necessario dividere il processo in più batch.
Quando lavori con siti che contengono migliaia di articoli, è importante adottare alcune strategie per evitare problemi di timeout o esaurimento delle risorse del server. L'approccio migliore è dividere il file CSV in parti più piccole, processando 500-1000 articoli alla volta. Questo previene timeout del server e rende il processo più gestibile.
Se hai accesso alla configurazione PHP del server, considera di aumentare temporaneamente i limiti di esecuzione e memoria aggiungendo queste righe all'inizio dello script:
set_time_limit(0);
ini_set('memory_limit', '700M');
Dopo aver completato ogni batch, verifica che le immagini siano state importate correttamente prima di procedere con il successivo. Se alcune immagini non vengono importate, controlla che gli URL siano ancora accessibili e che gli slug corrispondano esattamente tra il CSV e gli articoli importati.
Una volta completata l'importazione di tutti gli articoli e le immagini, è importante effettuare alcune verifiche per assicurarsi che tutto sia andato a buon fine. Controlla un campione rappresentativo di articoli per verificare che contenuti, metadati e immagini siano stati importati correttamente.
Se le immagini appaiono distorte o con dimensioni errate, potresti dover rigenerare le thumbnail utilizzando un plugin come "Regenerate Thumbnails". Questo è particolarmente importante se il nuovo sito usa dimensioni di immagine diverse dal sito originale.
Non dimenticare di aggiornare la struttura dei permalink andando su Impostazioni → Permalink e semplicemente salvando nuovamente le impostazioni. Questo rigenera il file .htaccess e assicura che tutti i link funzionino correttamente.
Questa soluzione rappresenta un metodo completamente gratuito ed efficace per migrare qualsiasi numero di articoli WordPress mantenendo intatte tutte le immagini in evidenza e i metadati associati. Mentre richiede qualche passaggio tecnico in più rispetto ai plugin premium, offre un controllo completo sul processo di migrazione e può gestire volumi di qualsiasi dimensione senza costi aggiuntivi.
Il metodo che abbiamo presentato è stato testato su migrazioni di migliaia di articoli e si è dimostrato affidabile e robusto. La chiave del successo sta nella preparazione accurata dei file CSV e nell'esecuzione metodica di ogni fase del processo.
Se la migrazione del tuo sito WordPress richiede competenze tecniche avanzate o se preferisci affidarti a professionisti esperti, il nostro team di sviluppo è a tua disposizione per gestire l'intero processo di migrazione, garantendo un trasferimento sicuro e completo di tutti i tuoi contenuti.
Lavoriamo a distanza senza problemi, ma è sempre bello conoscersi di persona. Puoi raggiungere il nostro ufficio con i principali mezzi pubblici, in auto o a piedi se ti trovi vicino al centro. Abbiamo sempre caffè, caramelle e un buon whiskey.
Assistenza tecnica e sviluppo dal lunedì al venerdì 9.30 - 18.30 esclusi festivi.
Per emergenze fuori orario puoi usare questo form
3 minuti a piedi dalla linea metropolitana M1 e stazione ferroviaria Milano P.ta Venezia
8 minuti a piedi dalla linea metropolitana M3 Milano Repubblica
10 minuti a piedi dalla linea metropolitana M2 M3 e stazione ferroviaria Centrale FS
Sei in auto? Ti consigliamo di parcheggiare in via Benedetto Marcello, a 5 minuti a piedi dal nostro ufficio
Da anni collaboriamo con agenzie di comunicazione e studi grafici in qualità di partner tecnologici. Sviluppiamo siti web, portali, app mobile e piattaforme digitali sulla base del vostro design e template, operando come ghost developers. Questo vi consente di mantenere la piena gestione del cliente finale senza dover internalizzare la parte tecnica, che può risultare complessa da gestire e dispendiosa. Lavoriamo con l’elasticità e l’efficienza di un team interno, gestendo autonomamente task tecnici articolati, distribuendoli tra le nostre figure specializzate. Il processo di sviluppo del vostro progetto sarà completamente trasparente: voi curate il design e la relazione con il cliente, al resto pensiamo noi.