EmDash bietet einen vollständigen Migrationspfad von WordPress. Importieren Sie Beiträge, Seiten, Medien und Taxonomien über das Admin-Dashboard – ohne CLI.
Bevor Sie starten
Inhalte exportieren
In WordPress unter Werkzeuge → Export eine vollständige Exportdatei (.xml) herunterladen.
Website sichern
WordPress weiter betreiben, bis die Migration erfolgreich verifiziert ist.
Importmethoden
EmDash unterstützt drei Methoden zum Import von WordPress-Inhalten:
| Methode | Am besten für | Enthält Entwürfe | Auth nötig |
|---|---|---|---|
| WXR-Datei-Upload | Vollständige Migrationen | Ja | Nein |
| WordPress.com | Auf WordPress.com gehostete Sites | Ja | OAuth |
| REST-API (Probe) | Inhalte vor dem Export prüfen | Nein | Optional |
Der WXR-Datei-Upload wird für die meisten Migrationen empfohlen. Er erfasst alle Inhalte einschließlich Entwürfe, benutzerdefinierter Felder und privater Beiträge.
WXR-Dateiimport
-
Aus WordPress exportieren
Im WordPress-Admin Werkzeuge → Export → Alle Inhalte → Exportdatei herunterladen.
-
Import-Assistenten öffnen
In EmDash Admin → Einstellungen → Import → WordPress.
-
Exportdatei hochladen
.xml-Datei per Drag-and-drop ablegen oder zum Durchsuchen klicken. Die Datei wird im Browser geparst. -
Erkannte Inhalte prüfen
Der Assistent zeigt, was gefunden wurde:
Found in export: ├── Posts: 127 → posts [New collection] ├── Pages: 12 → pages [Add fields] └── Media: 89 attachments -
Zuordnungen konfigurieren
Festlegen, welche Post Types importiert werden. EmDash:
- legt neue Collections für nicht zugeordnete Post Types an
- ergänzt fehlende Felder in bestehenden Collections
- warnt bei Feldtyp-Konflikten
-
Import ausführen
Inhalt importieren klicken. Der Fortschritt wird pro Eintrag angezeigt.
-
Medien importieren (optional)
Nach dem Inhaltsimport Medien-Dateien optional herunterladen. EmDash:
- lädt von Ihren WordPress-URLs
- dedupliziert per Content-Hash
- schreibt URLs im Inhalt automatisch um
Inhaltskonvertierung
Gutenberg zu Portable Text
EmDash wandelt Gutenberg-Blöcke in Portable Text, ein strukturiertes Inhaltsformat.
| Gutenberg-Block | Portable Text | Hinweise |
|---|---|---|
core/paragraph | block style=“normal” | Inline-Markierungen erhalten |
core/heading | block style=“h1-h6” | Level aus Block-Attributen |
core/image | image block | Medienreferenz aktualisiert |
core/list | block mit listItem type | Nummeriert und unnummeriert |
core/quote | block style=“blockquote” | Zitatangabe enthalten |
core/code | code block | Sprach-Attribut erhalten |
core/embed | embed block | URL und Anbieter gespeichert |
core/gallery | gallery block | Array von Bildreferenzen |
core/columns | columns block | Verschachtelter Inhalt erhalten |
| Unbekannte Blöcke | htmlBlock | Rohes HTML zur Prüfung erhalten |
Unbekannte Blöcke werden als htmlBlock mit Original-HTML und Block-Metadaten gespeichert. Sie können sie manuell prüfen und konvertieren oder eigene Portable-Text-Komponenten zum Rendern erstellen.
Classic-Editor-Inhalte
HTML aus dem Classic Editor wird in Portable-Text-Blöcke umgewandelt. Inline-Styles (<strong>, <em>, <a>) werden zu Markierungen auf Spans.
Status-Zuordnung
| WordPress-Status | EmDash-Status |
|---|---|
publish | published |
draft | draft |
pending | pending |
private | private |
future | scheduled |
trash | archived |
Taxonomie-Import
Kategorien und Schlagwörter werden als Taxonomien mit erhaltener Hierarchie importiert:
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
Benutzerdefinierte Felder und ACF
WordPress-Post-Meta und ACF-Felder werden beim Import analysiert:
-
Analysephase
Der Assistent erkennt benutzerdefinierte Felder und schlägt EmDash-Feldtypen vor:
Custom Fields: ├── subtitle (string, 45 posts) ├── _yoast_wpseo_title → seo.title (string, 127 posts) ├── _thumbnail_id → featuredImage (reference, 89 posts) └── price (number, 23 posts) -
Feldzuordnung
Interne WordPress-Felder (beginnend mit
_edit_,_wp_) sind standardmäßig ausgeblendet. SEO-Plugin-Felder werden einemseo-Objekt zugeordnet. -
Typinferenz
EmDash leitet Feldtypen aus Werten ab:
- Numerische Strings →
number "1","0","true","false"→boolean- ISO-Daten →
date - Serialisiertes PHP/JSON →
json - WordPress-IDs (z. B.
_thumbnail_id) →reference
- Numerische Strings →
URL-Weiterleitungen
Nach dem Import erzeugt EmDash eine Redirect-Map:
{
"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" }
]
}
Diese Weiterleitungen anwenden auf:
- Cloudflare Redirect Rules
- Redirect-Konfiguration Ihrer Hosting-Plattform
- Astros Option
redirectsinastro.config.mjs
Konzept-Mapping (Referenz)
Diese Tabelle hilft beim Übertragen von WordPress-Mustern auf EmDash:
| WordPress | EmDash | Hinweise |
|---|---|---|
register_post_type() | Collection im Admin-UI | Über Dashboard oder API |
register_taxonomy() | Taxonomie oder Array-Feld | Je nach Komplexität |
register_meta() | Feld im Collection-Schema | Typisiert, kein Key-Value |
WP_Query | getCollection(filters) | Laufzeitabfragen |
get_post() | getEntry(collection, id) | Gibt Eintrag oder null zurück |
wp_insert_post() | POST /_emdash/api/content/{type} | REST-API |
the_content | <PortableText value={...} /> | Portable-Text-Rendering |
add_shortcode() | Portable-Text-Custom-Block | Eigene Renderer-Komponente |
register_block_type() | Portable-Text-Custom-Block | Wie Shortcodes |
add_menu_page() | Plugin-Admin-Seite | Unter /_emdash/admin/ |
add_action/filter() | Plugin-Hooks | hooks.content:beforeSave |
wp_options | ctx.kv | Key-Value-Store |
wp_postmeta | Collection-Felder | Strukturiert, kein Key-Value |
$wpdb | ctx.storage | Direkter Speicherzugriff |
| Kategorien/Schlagwörter | Taxonomien | Hierarchie erhalten |
API-Import (fortgeschritten)
Der WordPress-Import ist über das Admin-Dashboard und die REST-API verfügbar. Für die beste Erfahrung den Import-Assistenten nutzen – er bietet Feldzuordnung, Konfliktlösung und Fortschrittsanzeige.
Die Import-API-Endpunkte liegen unter /_emdash/api/import/wordpress/ für programmatischen Zugriff.
Fehlerbehebung
„XML parsing error“
Die Exportdatei ist möglicherweise beschädigt oder unvollständig. Erneut aus WordPress exportieren.
Medien-Download schlägt fehl
Einige Bilder können hinter Authentifizierung liegen oder umgezogen sein. Der Import läuft weiter; fehlgeschlagene URLs werden protokolliert.
Feldtyp-Konflikte
Wenn eine bestehende Collection ein Feld mit inkompatiblem Typ hat, zeigt der Assistent den Konflikt. Dann entweder:
- EmDash-Feld umbenennen
- WordPress-Feldzuordnung ändern
- Collection löschen und neu anlegen
Große Exporte
Bei Exporten über 100 MB:
- Post Types in WordPress getrennt exportieren
- Dateien nacheinander importieren
- CLI mit
--resumefür Zuverlässigkeit nutzen
Nächste Schritte
- Content Import — Weitere Importquellen und -methoden
- Plugin Porting — WordPress-Plugin-Funktionalität migrieren
- Working with Content — Importierte Inhalte abfragen und rendern