Migrar desde WordPress

En esta página

EmDash ofrece una ruta de migración completa desde WordPress. Importa entradas, páginas, medios y taxonomías desde el panel de administración, sin necesidad de CLI.

Antes de empezar

Exporta tu contenido

En WordPress, ve a Herramientas → Exportar y descarga un archivo de exportación completo (.xml).

Haz copia de seguridad del sitio

Mantén WordPress en marcha hasta verificar que la migración ha tenido éxito.

Métodos de importación

EmDash admite tres métodos para importar contenido de WordPress:

MétodoIdeal paraIncluye borradoresRequiere auth
Subida WXRMigraciones completasNo
WordPress.comSitios alojados en WordPress.comOAuth
REST API (sondeo)Revisar contenido antes de exportarNoOpcional

La subida de archivo WXR se recomienda en la mayoría de los casos: captura todo el contenido, incluidos borradores, campos personalizados y entradas privadas.

Importación con archivo WXR

  1. Exportar desde WordPress

    En el admin de WordPress, Herramientas → Exportar → Todo el contenido → Descargar archivo de exportación.

  2. Abrir el asistente de importación

    En EmDash, Admin → Ajustes → Importar → WordPress.

  3. Subir el archivo de exportación

    Arrastra y suelta tu .xml o haz clic para buscar. El archivo se analiza en el navegador.

  4. Revisar el contenido detectado

    El asistente muestra lo encontrado:

    Found in export:
    ├── Posts: 127 → posts [New collection]
    ├── Pages: 12  → pages [Add fields]
    └── Media: 89 attachments
  5. Configurar asignaciones

    Activa qué tipos de entrada importar. EmDash automáticamente:

    • Crea colecciones nuevas para tipos sin asignar
    • Añade campos faltantes a colecciones existentes
    • Advierte sobre conflictos de tipo de campo
  6. Ejecutar la importación

    Pulsa Importar contenido. Verás el progreso por cada elemento.

  7. Importar medios (opcional)

    Tras el contenido, elige si descargar archivos multimedia. EmDash:

    • Descarga desde tus URLs de WordPress
    • Deduplica por hash de contenido
    • Reescribe URLs en el contenido automáticamente

Conversión de contenido

Gutenberg a Portable Text

EmDash convierte bloques de Gutenberg a Portable Text, un formato estructurado.

Bloque GutenbergPortable TextNotas
core/paragraphblock style=“normal”Marcas en línea conservadas
core/headingblock style=“h1-h6”Nivel desde atributos
core/imageblock imageReferencia de medio actualizada
core/listblock con tipo listItemOrdenadas y no ordenadas
core/quoteblock style=“blockquote”Cita incluida
core/codeblock codeAtributo de idioma conservado
core/embedblock embedURL y proveedor almacenados
core/galleryblock galleryArray de referencias a imágenes
core/columnsblock columnsContenido anidado conservado
Bloques desconocidoshtmlBlockHTML sin procesar para revisión

Los bloques desconocidos se guardan como htmlBlock con HTML y metadatos originales. Puedes revisarlos y convertirlos manualmente o crear componentes Portable Text personalizados.

Contenido del editor clásico

El HTML del editor clásico se convierte en bloques Portable Text. Estilos en línea (<strong>, <em>, <a>) pasan a ser marcas en spans.

Asignación de estados

Estado WordPressEstado EmDash
publishpublished
draftdraft
pendingpending
privateprivate
futurescheduled
trasharchived

Importación de taxonomías

Categorías y etiquetas se importan como taxonomías conservando la jerarquía:

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

Campos personalizados y ACF

Los metadatos de entradas y los campos ACF se analizan durante la importación:

  1. Fase de análisis

    El asistente detecta campos personalizados y sugiere tipos de 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. Asignación de campos

    Los campos internos de WordPress (que empiezan por _edit_, _wp_) están ocultos por defecto. Los campos de plugins SEO se mapean a un objeto seo.

  3. Inferencia de tipos

    EmDash infiere tipos a partir de valores:

    • Cadenas numéricas → number
    • "1", "0", "true", "false"boolean
    • Fechas ISO → date
    • PHP/JSON serializado → json
    • IDs de WordPress (p. ej. _thumbnail_id) → reference

Redirecciones de URL

Tras la importación, EmDash genera un mapa de redirecciones:

{
	"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" }
	]
}

Aplica estas redirecciones en:

  • Reglas de redirección de Cloudflare
  • La configuración de redirecciones de tu hosting
  • La opción redirects de Astro en astro.config.mjs

Tabla de referencia de conceptos

Usa esta tabla al adaptar patrones de WordPress a EmDash:

WordPressEmDashNotas
register_post_type()Colección en el adminCreada desde panel o API
register_taxonomy()Taxonomía o campo arraySegún complejidad
register_meta()Campo en el esquema de colecciónTipado, no clave-valor
WP_QuerygetCollection(filters)Consultas en tiempo de ejecución
get_post()getEntry(collection, id)Devuelve entrada o null
wp_insert_post()POST /_emdash/api/content/{type}REST API
the_content<PortableText value={...} />Renderizado Portable Text
add_shortcode()Bloque personalizado Portable TextComponente renderer propio
register_block_type()Bloque personalizado Portable TextIgual que shortcodes
add_menu_page()Página admin del pluginBajo /_emdash/admin/
add_action/filter()Hooks del pluginhooks.content:beforeSave
wp_optionsctx.kvAlmacén clave-valor
wp_postmetaCampos de colecciónEstructurado
$wpdbctx.storageAcceso directo al almacenamiento
Categorías/EtiquetasTaxonomíasJerarquía conservada

Importación por API (avanzado)

La importación de WordPress está disponible en el panel y en la REST API. Para la mejor experiencia usa el asistente: ofrece mapeo de campos, resolución de conflictos y seguimiento del progreso.

Los endpoints de importación están bajo /_emdash/api/import/wordpress/ para acceso programático.

Solución de problemas

«XML parsing error»

El archivo de exportación puede estar corrupto o incompleto. Vuelve a exportar desde WordPress.

Fallos al descargar medios

Algunas imágenes pueden estar protegidas o haber cambiado de URL. La importación continúa y las URLs fallidas quedan registradas.

Conflictos de tipo de campo

Si una colección existente tiene un campo con tipo incompatible, el asistente muestra el conflicto. Opciones:

  • Renombrar el campo en EmDash
  • Cambiar el mapeo del campo en WordPress
  • Eliminar y recrear la colección

Exportaciones grandes

Para exportaciones de más de 100 MB:

  1. Exporta tipos de entrada por separado en WordPress
  2. Importa cada archivo en secuencia
  3. Usa la CLI con --resume para mayor fiabilidad

Próximos pasos