Migrare da WordPress

In questa pagina

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:

MetodoIdeale perInclude bozzeRichiede auth
Caricamento WXRMigrazioni completeNo
WordPress.comSiti ospitati su WordPress.comOAuth
REST API (probe)Controllare i contenuti prima dell’exportNoOpzionale

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

  1. Esporta da WordPress

    Nell’admin WordPress: Strumenti → Esporta → Tutti i contenuti → Scarica il file di esportazione.

  2. Apri la procedura guidata

    In EmDash: Admin → Impostazioni → Importa → WordPress.

  3. Carica il file di esportazione

    Trascina il .xml o sfoglia. Il file viene analizzato nel browser.

  4. 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
  5. 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
  6. Esegui l’importazione

    Clicca Importa contenuti. Il progresso viene mostrato per ogni elemento.

  7. 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 GutenbergPortable TextNote
core/paragraphblock style=“normal”Marcature inline preservate
core/headingblock style=“h1-h6”Livello dagli attributi
core/imageblocco imageRiferimento media aggiornato
core/listblock con tipo listItemOrdinate e non ordinate
core/quoteblock style=“blockquote”Citazione inclusa
core/codeblocco codeAttributo lingua preservato
core/embedblocco embedURL e provider memorizzati
core/galleryblocco galleryArray di riferimenti immagine
core/columnsblocco columnsContenuto annidato preservato
Blocchi sconosciutihtmlBlockHTML 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 WordPressStato EmDash
publishpublished
draftdraft
pendingpending
privateprivate
futurescheduled
trasharchived

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:

  1. 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)
  2. Mappatura campi

    I campi interni WordPress (_edit_, _wp_) sono nascosti di default. I campi dei plugin SEO sono mappati su un oggetto seo.

  3. 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

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 redirects di Astro in astro.config.mjs

Tabella di riferimento concetti

WordPressEmDashNote
register_post_type()Collection nell’admin UICreata da dashboard o API
register_taxonomy()Tassonomia o campo arrayIn base alla complessità
register_meta()Campo nello schema collectionTipizzato, non chiave-valore
WP_QuerygetCollection(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 personalizzatoComponente renderer
register_block_type()Blocco Portable Text personalizzatoCome gli shortcode
add_menu_page()Pagina admin del pluginSotto /_emdash/admin/
add_action/filter()Hook del pluginhooks.content:beforeSave
wp_optionsctx.kvArchivio chiave-valore
wp_postmetaCampi della collectionStrutturato
$wpdbctx.storageAccesso diretto allo storage
Categorie/TagTassonomieGerarchia 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:

  1. Esporta i tipi di post separatamente in WordPress
  2. Importa ogni file in sequenza
  3. Usa la CLI con --resume

Passi successivi