O EmDash oferece um caminho completo de migração a partir do WordPress. Importe posts, páginas, mídia e taxonomias pelo painel de administração, sem CLI.
Antes de começar
Exporte o conteúdo
No WordPress, vá a Ferramentas → Exportar e descarregue um ficheiro de exportação completo (.xml).
Faça cópia de segurança do site
Mantenha o WordPress ativo até confirmar que a migração foi bem-sucedida.
Métodos de importação
O EmDash suporta três formas de importar conteúdo WordPress:
| Método | Melhor para | Inclui rascunhos | Requer auth |
|---|---|---|---|
| Envio WXR | Migrações completas | Sim | Não |
| WordPress.com | Sites alojados no WordPress.com | Sim | OAuth |
| REST API (sonda) | Ver conteúdo antes de exportar | Não | Opcional |
O envio de ficheiro WXR é recomendado na maioria dos casos: captura todo o conteúdo, incluindo rascunhos, campos personalizados e posts privados.
Importação por ficheiro WXR
-
Exportar do WordPress
No admin WordPress: Ferramentas → Exportar → Todo o conteúdo → Descarregar ficheiro de exportação.
-
Abrir o assistente de importação
No EmDash: Admin → Definições → Importar → WordPress.
-
Carregar o ficheiro de exportação
Arraste o
.xmlou escolha o ficheiro. É analisado no navegador. -
Rever o conteúdo detetado
O assistente mostra o que foi encontrado:
Found in export: ├── Posts: 127 → posts [New collection] ├── Pages: 12 → pages [Add fields] └── Media: 89 attachments -
Configurar mapeamentos
Escolha que tipos de post importar. O EmDash:
- cria coleções novas para tipos não mapeados
- adiciona campos em falta às coleções existentes
- avisa sobre conflitos de tipo de campo
-
Executar a importação
Clique em Importar conteúdo. O progresso aparece por item.
-
Importar média (opcional)
Após o conteúdo, escolha se descarrega ficheiros de média. O EmDash:
- descarrega a partir dos URLs WordPress
- deduplica por hash de conteúdo
- reescreve URLs no conteúdo automaticamente
Conversão de conteúdo
Gutenberg para Portable Text
O EmDash converte blocos Gutenberg em Portable Text, um formato estruturado.
| Bloco Gutenberg | Portable Text | Notas |
|---|---|---|
core/paragraph | block style=“normal” | Marcas inline preservadas |
core/heading | block style=“h1-h6” | Nível a partir dos atributos |
core/image | bloco image | Referência de média atualizada |
core/list | block com tipo listItem | Ordenadas e não ordenadas |
core/quote | block style=“blockquote” | Citação incluída |
core/code | bloco code | Atributo de idioma preservado |
core/embed | bloco embed | URL e fornecedor armazenados |
core/gallery | bloco gallery | Array de referências de imagem |
core/columns | bloco columns | Conteúdo aninhado preservado |
| Blocos desconhecidos | htmlBlock | HTML bruto para revisão |
Blocos desconhecidos ficam em htmlBlock com HTML e metadados originais. Pode converter manualmente ou criar componentes Portable Text.
Conteúdo do editor clássico
O HTML do editor clássico converte-se em blocos Portable Text. Estilos inline (<strong>, <em>, <a>) tornam-se marcas em spans.
Mapeamento de estados
| Estado WordPress | Estado EmDash |
|---|---|
publish | published |
draft | draft |
pending | pending |
private | private |
future | scheduled |
trash | archived |
Importação de taxonomias
Categorias e etiquetas importam-se como taxonomias com hierarquia preservada:
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 e ACF
Meta de posts e campos ACF são analisados durante a importação:
-
Fase de análise
O assistente deteta campos personalizados e sugere tipos 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) -
Mapeamento de campos
Campos internos WordPress (
_edit_,_wp_) ficam ocultos por predefinição. Campos de SEO mapeiam para um objetoseo. -
Inferência de tipos
O EmDash infere tipos a partir dos valores:
- Cadeias numéricas →
number "1","0","true","false"→boolean- Datas ISO →
date - PHP/JSON serializado →
json - IDs WordPress (ex.:
_thumbnail_id) →reference
- Cadeias numéricas →
Redirecionamentos de URL
Após a importação, o EmDash gera um mapa de redirecionamentos:
{
"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" }
]
}
Aplique em:
- Regras Cloudflare
- Configuração de redirecionamentos do alojamento
- Opção
redirectsdo Astro emastro.config.mjs
Referência de mapeamento de conceitos
| WordPress | EmDash | Notas |
|---|---|---|
register_post_type() | Coleção no admin | Criada no painel ou API |
register_taxonomy() | Taxonomia ou campo array | Conforme complexidade |
register_meta() | Campo no esquema da coleção | Tipado, não chave-valor |
WP_Query | getCollection(filters) | Consultas em tempo de execução |
get_post() | getEntry(collection, id) | Devolve entrada ou null |
wp_insert_post() | POST /_emdash/api/content/{type} | REST API |
the_content | <PortableText value={...} /> | Renderização Portable Text |
add_shortcode() | Bloco Portable Text personalizado | Componente renderer |
register_block_type() | Bloco Portable Text personalizado | Como shortcodes |
add_menu_page() | Página admin do plugin | Sob /_emdash/admin/ |
add_action/filter() | Hooks do plugin | hooks.content:beforeSave |
wp_options | ctx.kv | Armazenamento chave-valor |
wp_postmeta | Campos da coleção | Estruturado |
$wpdb | ctx.storage | Acesso direto ao armazenamento |
| Categorias/Etiquetas | Taxonomias | Hierarquia preservada |
Importação API (avançado)
A importação WordPress está disponível no painel e na REST API. Para mapeamento, resolução de conflitos e progresso, use o assistente.
Os endpoints ficam em /_emdash/api/import/wordpress/.
Resolução de problemas
«XML parsing error»
O ficheiro de exportação pode estar corrompido ou incompleto. Volte a exportar do WordPress.
Falhas ao descarregar média
Algumas imagens podem exigir autenticação ou ter URLs alteradas. A importação continua; URLs falhadas são registadas.
Conflitos de tipo de campo
Se uma coleção existente tiver campo incompatível, o assistente mostra o conflito. Pode:
- Renomear o campo no EmDash
- Alterar o mapeamento WordPress
- Eliminar e recriar a coleção
Exportações grandes
Para mais de 100 MB:
- Exporte tipos de post separadamente no WordPress
- Importe cada ficheiro em sequência
- Use a CLI com
--resume
Próximos passos
- Content Import — Outras fontes e métodos de importação
- Plugin Porting — Migrar funcionalidade de plugins WordPress
- Working with Content — Consultar e renderizar conteúdo importado