Migrar do WordPress

Nesta página

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étodoMelhor paraInclui rascunhosRequer auth
Envio WXRMigrações completasSimNão
WordPress.comSites alojados no WordPress.comSimOAuth
REST API (sonda)Ver conteúdo antes de exportarNãoOpcional

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

  1. Exportar do WordPress

    No admin WordPress: Ferramentas → Exportar → Todo o conteúdo → Descarregar ficheiro de exportação.

  2. Abrir o assistente de importação

    No EmDash: Admin → Definições → Importar → WordPress.

  3. Carregar o ficheiro de exportação

    Arraste o .xml ou escolha o ficheiro. É analisado no navegador.

  4. 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
  5. 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
  6. Executar a importação

    Clique em Importar conteúdo. O progresso aparece por item.

  7. 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 GutenbergPortable TextNotas
core/paragraphblock style=“normal”Marcas inline preservadas
core/headingblock style=“h1-h6”Nível a partir dos atributos
core/imagebloco imageReferência de média atualizada
core/listblock com tipo listItemOrdenadas e não ordenadas
core/quoteblock style=“blockquote”Citação incluída
core/codebloco codeAtributo de idioma preservado
core/embedbloco embedURL e fornecedor armazenados
core/gallerybloco galleryArray de referências de imagem
core/columnsbloco columnsConteúdo aninhado preservado
Blocos desconhecidoshtmlBlockHTML 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 WordPressEstado EmDash
publishpublished
draftdraft
pendingpending
privateprivate
futurescheduled
trasharchived

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:

  1. 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)
  2. Mapeamento de campos

    Campos internos WordPress (_edit_, _wp_) ficam ocultos por predefinição. Campos de SEO mapeiam para um objeto seo.

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

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 redirects do Astro em astro.config.mjs

Referência de mapeamento de conceitos

WordPressEmDashNotas
register_post_type()Coleção no adminCriada no painel ou API
register_taxonomy()Taxonomia ou campo arrayConforme complexidade
register_meta()Campo no esquema da coleçãoTipado, não chave-valor
WP_QuerygetCollection(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 personalizadoComponente renderer
register_block_type()Bloco Portable Text personalizadoComo shortcodes
add_menu_page()Página admin do pluginSob /_emdash/admin/
add_action/filter()Hooks do pluginhooks.content:beforeSave
wp_optionsctx.kvArmazenamento chave-valor
wp_postmetaCampos da coleçãoEstruturado
$wpdbctx.storageAcesso direto ao armazenamento
Categorias/EtiquetasTaxonomiasHierarquia 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:

  1. Exporte tipos de post separadamente no WordPress
  2. Importe cada ficheiro em sequência
  3. Use a CLI com --resume

Próximos passos