EmDash importa contenido desde WordPress y otras plataformas. Cada fuente de importación detecta una plataforma, analiza su contenido y lo obtiene en tu sitio.
Fuentes de importación
| ID de fuente | Plataforma | Sondeo | OAuth | Importación completa |
|---|---|---|---|---|
wxr | Archivo de exportación WordPress | No | No | Sí |
wordpress-com | WordPress.com | Sí | Sí | Sí |
wordpress-rest | WordPress autoalojado | Sí | No | Solo sondeo |
Subida de archivo WXR
El método de importación más completo. Sube un archivo de exportación WordPress eXtended RSS (WXR) directamente al panel de administración.
Capacidades:
- Todos los tipos de entrada (incluidos los personalizados)
- Todos los campos meta
- Borradores y entradas privadas
- Jerarquía completa de taxonomías
- Metadatos de adjuntos de medios
Cómo obtener un archivo WXR:
- En el admin de WordPress, ve a Herramientas → Exportar
- Selecciona Todo el contenido o tipos de entrada específicos
- Haz clic en Descargar archivo de exportación
- Sube el archivo
.xmla EmDash
OAuth de WordPress.com
Para sitios alojados en WordPress.com, conéctate vía OAuth para importar sin exportaciones manuales de archivos.
- Introduce la URL de tu sitio WordPress.com
- Haz clic en Conectar con WordPress.com
- Autoriza EmDash en la ventana emergente de WordPress.com
- Selecciona el contenido a importar
Qué incluye:
- Contenido publicado y borradores
- Entradas privadas (con autorización)
- Archivos de medios vía API
- Campos personalizados expuestos a la REST API
Sondeo de la REST API de WordPress
Cuando introduces una URL, EmDash sondea el sitio para detectar WordPress y mostrar el contenido disponible:
Detectado: WordPress 6.4
├── Entradas: 127 (publicadas)
├── Páginas: 12 (publicadas)
└── Medios: 89 archivos
Nota: Los borradores y contenido privado requieren autenticación
o una exportación WXR completa.
El sondeo REST es informativo. Para importaciones completas, sugiere subir un archivo WXR o conectarse vía OAuth (para WordPress.com).
Flujo de importación
Todas las fuentes siguen el mismo flujo:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Conectar │────▶│ Analizar │────▶│ Preparar │────▶│ Ejecutar │
│ (sondear/ │ │ (verificar │ │ (crear │ │ (importar │
│ subir) │ │ esquema) │ │ esquema) │ │ contenido) │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
Paso 1: Conectar
Introduce una URL para sondear o sube un archivo directamente.
El sondeo de URL ejecuta todas las fuentes registradas en paralelo. La coincidencia con mayor confianza determina la acción sugerida:
- Sitio WordPress.com → Ofrecer conexión OAuth
- WordPress autoalojado → Mostrar instrucciones de exportación
- Desconocido → Sugerir subida de archivo
Paso 2: Analizar
La fuente analiza el contenido y verifica la compatibilidad del esquema:
Tipos de entrada:
├── post (127) → posts [Nueva colección]
├── page (12) → pages [Existente, compatible]
├── product (45) → products [Añadir 3 campos]
└── revision (234) → [Omitir - tipo interno]
Cambios de esquema requeridos:
├── Crear colección: posts
├── Añadir campos a pages: featured_image
└── Crear colección: products
Cada tipo de entrada muestra su estado:
| Estado | Significado |
|---|---|
| Listo | La colección existe con campos compatibles |
| Nueva colección | Se creará automáticamente |
| Añadir campos | La colección existe, se añaden campos faltantes |
| Incompatible | Conflictos de tipo de campo (corrección manual necesaria) |
Paso 3: Preparar esquema
Haz clic en Crear esquema e importar para:
- Crear nuevas colecciones
- Añadir campos faltantes con los tipos de columna correctos
- Configurar tablas de contenido con índices
Paso 4: Ejecutar importación
El contenido se importa secuencialmente:
- Gutenberg/HTML convertido a Portable Text
- Estado de WordPress mapeado a estado de EmDash
- Autores de WordPress mapeados a propiedad (
authorId) y bylines de presentación - Taxonomías creadas y vinculadas
- Bloques reutilizables (
wp_block) importados como Secciones - Progreso mostrado en tiempo real
Comportamiento de importación de autores:
- Si un mapeo de autor apunta a un usuario de EmDash, la propiedad se establece a ese usuario y se crea/reutiliza un byline vinculado para el mismo usuario.
- Si no hay mapeo de usuario, se crea/reutiliza un byline de invitado a partir de la identidad del autor de WordPress.
- Las entradas importadas obtienen créditos de byline ordenados, con el primer crédito establecido como
primaryBylineId.
Paso 5: Importación de medios (Opcional)
Después del contenido, opcionalmente importa los medios:
-
Análisis — Muestra conteos de adjuntos por tipo
Medios encontrados: ├── Imágenes: 75 archivos ├── Vídeo: 10 archivos └── Otros: 4 archivos -
Descarga — Transmite desde URLs de WordPress con progreso
Importando medios... ├── 45 de 89 (50%) ├── Actual: vacation-photo.jpg └── Estado: Subiendo -
Reescritura de URLs — El contenido se actualiza automáticamente con las nuevas URLs
La importación de medios usa hashing de contenido (xxHash64) para deduplicación. La misma imagen usada en múltiples entradas se almacena una sola vez.
Endpoints de API
El sistema de importación expone estos endpoints:
Sondear URL
Detecta la plataforma detrás de una URL con una solicitud de sondeo:
POST /_emdash/api/import/probe
Content-Type: application/json
{ "url": "https://example.com" }
La respuesta contiene la plataforma detectada y la acción sugerida.
Analizar WXR
Sube un archivo WXR para analizar sus tipos de entrada y compatibilidad de esquema:
POST /_emdash/api/import/wordpress/analyze
Content-Type: multipart/form-data
file: [Exportación WordPress .xml]
La respuesta contiene el análisis de tipos de entrada con compatibilidad de esquema.
Preparar esquema
Crea las colecciones y campos para los tipos de entrada seleccionados:
POST /_emdash/api/import/wordpress/prepare
Content-Type: application/json
{
"postTypes": [
{ "name": "post", "collection": "posts", "enabled": true }
]
}
Ejecutar importación
Importa el contenido a las colecciones especificadas:
POST /_emdash/api/import/wordpress/execute
Content-Type: multipart/form-data
file: [Exportación WordPress .xml]
config: { "postTypeMappings": { "post": { "collection": "posts" } } }
Importar medios
Descarga y almacena los adjuntos de medios referenciados por la importación:
POST /_emdash/api/import/wordpress/media
Content-Type: application/json
{
"attachments": [{ "id": 123, "url": "https://..." }],
"stream": true
}
La respuesta transmite actualizaciones de progreso NDJSON durante la descarga/subida.
Reescribir URLs
Reemplaza las URLs de medios antiguas en el contenido importado con sus equivalentes almacenadas:
POST /_emdash/api/import/wordpress/rewrite-urls
Content-Type: application/json
{
"urlMap": { "https://old.com/image.jpg": "/_emdash/media/abc123" }
}
Manejo de errores
Errores recuperables
- Timeout de red — Reintento con backoff
- Fallo de análisis de un elemento — Registrado, omitido, la importación continúa
- Fallo de descarga de medios — Marcado para manejo manual
Errores fatales
- Formato de archivo inválido — La importación se detiene con mensaje de error
- Conexión a base de datos perdida — La importación se pausa, permite reanudar
- Cuota de almacenamiento excedida — La importación se detiene, muestra el uso
Informe de errores
Después de que una importación se completa, EmDash muestra un resumen de lo que tuvo éxito, lo que se ajustó y lo que falló:
Importación completada
✓ 125 entradas importadas
✓ 12 páginas importadas
✓ 85 referencias de medios registradas
⚠ 2 elementos tuvieron advertencias:
- Entrada "Special Characters ñ" - codificación de título corregida
- Página "About" - slug duplicado renombrado a "about-1"
✗ 1 elemento falló:
- ID de entrada 456 - error de análisis de contenido (guardado como borrador)
Los elementos fallidos se guardan como borradores con el contenido original en _importError para revisión.
Fuentes personalizadas
Para importar desde una plataforma que las fuentes integradas no cubren, implementa la interfaz ImportSource y regístrala en la integración:
import { mySource } from "./src/import/custom-source";
export default defineConfig({
integrations: [
emdash({
import: { sources: [mySource] },
}),
],
});
La interfaz (probe, analyze, fetchContent) y la forma de salida normalizada están documentadas en Arquitectura (internos).
Próximos pasos
- Migración de WordPress — Guía completa de migración de WordPress
- Portar plugins — Portar plugins de WordPress a EmDash