EmDash offre un percorso di migrazione completo da WordPress. Importa articoli, pagine, media e tassonomie dalla dashboard di amministrazione, senza CLI.
Prima di iniziare
Esporta i contenuti
In WordPress vai su Strumenti → Esporta e scarica un file di esportazione completo (.xml).
Esegui il backup del sito
Tieni WordPress attivo finché non verifichi che la migrazione sia riuscita.
Metodi di importazione
EmDash supporta tre metodi per importare contenuti WordPress:
| Metodo | Ideale per | Include bozze | Richiede auth |
|---|---|---|---|
| Caricamento WXR | Migrazioni complete | Sì | No |
| WordPress.com | Siti ospitati su WordPress.com | Sì | OAuth |
| REST API (probe) | Controllare i contenuti prima dell’export | No | Opzionale |
Il caricamento del file WXR è consigliato nella maggior parte dei casi: acquisisce tutti i contenuti, inclusi bozze, campi personalizzati e articoli privati.
Importazione file WXR
-
Esporta da WordPress
Nell’admin WordPress: Strumenti → Esporta → Tutti i contenuti → Scarica il file di esportazione.
-
Apri la procedura guidata
In EmDash: Admin → Impostazioni → Importa → WordPress.
-
Carica il file di esportazione
Trascina il
.xmlo sfoglia. Il file viene analizzato nel browser. -
Rivedi i contenuti rilevati
La procedura mostra cosa è stato trovato:
Found in export: ├── Posts: 127 → posts [New collection] ├── Pages: 12 → pages [Add fields] └── Media: 89 attachments -
Configura le mappature
Scegli quali tipi di post importare. EmDash:
- crea nuove collection per tipi non mappati
- aggiunge campi mancanti alle collection esistenti
- segnala conflitti di tipo campo
-
Esegui l’importazione
Clicca Importa contenuti. Il progresso viene mostrato per ogni elemento.
-
Importa i media (opzionale)
Dopo i contenuti, scegli se scaricare i file multimediali. EmDash:
- scarica dagli URL WordPress
- deduplica tramite hash del contenuto
- riscrive automaticamente gli URL nel contenuto
Conversione dei contenuti
Gutenberg in Portable Text
EmDash converte i blocchi Gutenberg in Portable Text, un formato strutturato.
| Blocco Gutenberg | Portable Text | Note |
|---|---|---|
core/paragraph | block style=“normal” | Marcature inline preservate |
core/heading | block style=“h1-h6” | Livello dagli attributi |
core/image | blocco image | Riferimento media aggiornato |
core/list | block con tipo listItem | Ordinate e non ordinate |
core/quote | block style=“blockquote” | Citazione inclusa |
core/code | blocco code | Attributo lingua preservato |
core/embed | blocco embed | URL e provider memorizzati |
core/gallery | blocco gallery | Array di riferimenti immagine |
core/columns | blocco columns | Contenuto annidato preservato |
| Blocchi sconosciuti | htmlBlock | HTML grezzo per revisione |
I blocchi sconosciuti sono salvati come htmlBlock con HTML e metadati originali. Puoi convertirli manualmente o creare componenti Portable Text personalizzati.
Contenuto dell’editor classico
L’HTML dell’editor classico diventa blocchi Portable Text. Gli stili inline (<strong>, <em>, <a>) diventano marcature sugli span.
Mappatura degli stati
| Stato WordPress | Stato EmDash |
|---|---|
publish | published |
draft | draft |
pending | pending |
private | private |
future | scheduled |
trash | archived |
Importazione tassonomie
Categorie e tag vengono importati come tassonomie con gerarchia preservata:
WordPress: EmDash:
├── Categories (hierarchical) ├── taxonomies table
│ ├── News │ ├── category/news
│ │ ├── Local │ ├── category/local (parent: news)
│ │ └── World │ ├── category/world (parent: news)
│ └── Sports │ └── category/sports
└── Tags (flat) └── content_taxonomies junction
├── featured ├── tag/featured
└── breaking └── tag/breaking
Campi personalizzati e ACF
I meta degli articoli e i campi ACF vengono analizzati durante l’importazione:
-
Fase di analisi
La procedura rileva campi personalizzati e suggerisce tipi di campo EmDash:
Custom Fields: ├── subtitle (string, 45 posts) ├── _yoast_wpseo_title → seo.title (string, 127 posts) ├── _thumbnail_id → featuredImage (reference, 89 posts) └── price (number, 23 posts) -
Mappatura campi
I campi interni WordPress (
_edit_,_wp_) sono nascosti di default. I campi dei plugin SEO sono mappati su un oggettoseo. -
Inferenza dei tipi
EmDash deduce i tipi dai valori:
- Stringhe numeriche →
number "1","0","true","false"→boolean- Date ISO →
date - PHP/JSON serializzato →
json - ID WordPress (es.
_thumbnail_id) →reference
- Stringhe numeriche →
Reindirizzamenti URL
Dopo l’importazione EmDash genera una mappa di redirect:
{
"redirects": [
{ "from": "/?p=123", "to": "/posts/hello-world" },
{ "from": "/2024/01/hello-world/", "to": "/posts/hello-world" },
{ "from": "/category/news/", "to": "/categories/news" }
],
"feeds": [
{ "from": "/feed/", "to": "/rss.xml" },
{ "from": "/feed/atom/", "to": "/atom.xml" }
]
}
Applica questi redirect a:
- Regole Cloudflare
- Configurazione redirect della piattaforma di hosting
- Opzione
redirectsdi Astro inastro.config.mjs
Tabella di riferimento concetti
| WordPress | EmDash | Note |
|---|---|---|
register_post_type() | Collection nell’admin UI | Creata da dashboard o API |
register_taxonomy() | Tassonomia o campo array | In base alla complessità |
register_meta() | Campo nello schema collection | Tipizzato, non chiave-valore |
WP_Query | getCollection(filters) | Query a runtime |
get_post() | getEntry(collection, id) | Restituisce entry o null |
wp_insert_post() | POST /_emdash/api/content/{type} | REST API |
the_content | <PortableText value={...} /> | Rendering Portable Text |
add_shortcode() | Blocco Portable Text personalizzato | Componente renderer |
register_block_type() | Blocco Portable Text personalizzato | Come gli shortcode |
add_menu_page() | Pagina admin del plugin | Sotto /_emdash/admin/ |
add_action/filter() | Hook del plugin | hooks.content:beforeSave |
wp_options | ctx.kv | Archivio chiave-valore |
wp_postmeta | Campi della collection | Strutturato |
$wpdb | ctx.storage | Accesso diretto allo storage |
| Categorie/Tag | Tassonomie | Gerarchia preservata |
Importazione API (avanzato)
L’import WordPress è disponibile dalla dashboard e dalla REST API. Per mapping campi, risoluzione conflitti e avanzamento usa la procedura guidata.
Gli endpoint sono sotto /_emdash/api/import/wordpress/.
Risoluzione problemi
«XML parsing error»
Il file di esportazione potrebbe essere corrotto o incompleto. Riesporta da WordPress.
Download media falliti
Alcune immagini possono richiedere autenticazione o essere state spostate. L’importazione continua; gli URL falliti vengono registrati.
Conflitti di tipo campo
Se una collection ha un campo incompatibile, la procedura segnala il conflitto. Puoi:
- Rinominare il campo EmDash
- Modificare la mappatura WordPress
- Eliminare e ricreare la collection
Esportazioni grandi
Per export oltre 100 MB:
- Esporta i tipi di post separatamente in WordPress
- Importa ogni file in sequenza
- Usa la CLI con
--resume
Passi successivi
- Content Import — Altre fonti e metodi di importazione
- Plugin Porting — Migrare la funzionalità dei plugin WordPress
- Working with Content — Interrogare e renderizzare i contenuti importati