EmDash propose un parcours de migration complet depuis WordPress. Importez articles, pages, médias et taxonomies via le tableau de bord d’administration, sans CLI.
Avant de commencer
Exporter votre contenu
Dans WordPress, allez dans Outils → Exporter et téléchargez un fichier d’export complet (.xml).
Sauvegarder votre site
Gardez WordPress actif jusqu’à ce que la migration soit validée.
Méthodes d’import
EmDash prend en charge trois méthodes pour importer du contenu WordPress :
| Méthode | Idéal pour | Inclut les brouillons | Auth requise |
|---|---|---|---|
| Fichier WXR | Migrations complètes | Oui | Non |
| WordPress.com | Sites hébergés sur WordPress.com | Oui | OAuth |
| REST API (sonde) | Vérifier le contenu avant export | Non | Optionnel |
L’upload d’un fichier WXR est recommandé dans la plupart des cas : il capture tout le contenu, y compris brouillons, champs personnalisés et articles privés.
Import fichier WXR
-
Exporter depuis WordPress
Dans l’admin WordPress : Outils → Exporter → Tout le contenu → Télécharger le fichier d’export.
-
Ouvrir l’assistant d’import
Dans EmDash : Admin → Réglages → Import → WordPress.
-
Téléverser le fichier d’export
Glissez-déposez votre
.xmlou parcourez les fichiers. Le fichier est analysé dans le navigateur. -
Examiner le contenu détecté
L’assistant affiche ce qui a été trouvé :
Found in export: ├── Posts: 127 → posts [New collection] ├── Pages: 12 → pages [Add fields] └── Media: 89 attachments -
Configurer les correspondances
Choisissez les types de publication à importer. EmDash :
- crée des collections pour les types non mappés
- ajoute les champs manquants aux collections existantes
- signale les conflits de type de champ
-
Lancer l’import
Cliquez sur Importer le contenu. La progression s’affiche pour chaque élément.
-
Importer les médias (optionnel)
Après le contenu, choisissez de télécharger les fichiers média. EmDash :
- télécharge depuis vos URLs WordPress
- déduplique par hachage de contenu
- réécrit automatiquement les URLs dans le contenu
Conversion du contenu
Gutenberg vers Portable Text
EmDash convertit les blocs Gutenberg en Portable Text, un format structuré.
| Bloc Gutenberg | Portable Text | Notes |
|---|---|---|
core/paragraph | block style=“normal” | Marques en ligne conservées |
core/heading | block style=“h1-h6” | Niveau depuis les attributs |
core/image | bloc image | Référence média mise à jour |
core/list | block avec type listItem | Listes ordonnées et non ordonnées |
core/quote | block style=“blockquote” | Citation incluse |
core/code | bloc code | Attribut langue conservé |
core/embed | bloc embed | URL et fournisseur stockés |
core/gallery | bloc gallery | Tableau de références d’images |
core/columns | bloc columns | Contenu imbriqué conservé |
| Blocs inconnus | htmlBlock | HTML brut pour relecture |
Les blocs inconnus sont stockés en htmlBlock avec HTML et métadonnées d’origine. Vous pouvez les convertir manuellement ou créer des composants Portable Text.
Contenu de l’éditeur classique
Le HTML de l’éditeur classique devient des blocs Portable Text. Les styles inline (<strong>, <em>, <a>) deviennent des marques sur des spans.
Correspondance des statuts
| Statut WordPress | Statut EmDash |
|---|---|
publish | published |
draft | draft |
pending | pending |
private | private |
future | scheduled |
trash | archived |
Import des taxonomies
Catégories et étiquettes sont importées en taxonomies avec hiérarchie préservée :
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
Champs personnalisés et ACF
Les métadonnées d’articles et les champs ACF sont analysés pendant l’import :
-
Phase d’analyse
L’assistant détecte les champs personnalisés et suggère des types 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) -
Correspondance des champs
Les champs internes WordPress (
_edit_,_wp_) sont masqués par défaut. Les champs SEO sont mappés vers un objetseo. -
Inférence de type
EmDash déduit les types à partir des valeurs :
- Chaînes numériques →
number "1","0","true","false"→boolean- Dates ISO →
date - PHP/JSON sérialisé →
json - IDs WordPress (ex.
_thumbnail_id) →reference
- Chaînes numériques →
Redirections d’URL
Après l’import, EmDash génère une carte de redirections :
{
"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" }
]
}
Appliquez-les via :
- Règles Cloudflare
- Configuration de redirection de votre hébergeur
- L’option
redirectsd’Astro dansastro.config.mjs
Table de correspondance des concepts
| WordPress | EmDash | Notes |
|---|---|---|
register_post_type() | Collection dans l’admin | Créée via tableau ou API |
register_taxonomy() | Taxonomie ou champ tableau | Selon la complexité |
register_meta() | Champ dans le schéma | Typé, pas clé-valeur |
WP_Query | getCollection(filters) | Requêtes à l’exécution |
get_post() | getEntry(collection, id) | Retourne l’entrée ou null |
wp_insert_post() | POST /_emdash/api/content/{type} | API REST |
the_content | <PortableText value={...} /> | Rendu Portable Text |
add_shortcode() | Bloc Portable Text personnalisé | Composant renderer |
register_block_type() | Bloc Portable Text personnalisé | Comme les shortcodes |
add_menu_page() | Page admin du plugin | Sous /_emdash/admin/ |
add_action/filter() | Hooks du plugin | hooks.content:beforeSave |
wp_options | ctx.kv | Stockage clé-valeur |
wp_postmeta | Champs de collection | Structuré |
$wpdb | ctx.storage | Accès stockage direct |
| Catégories/Étiquettes | Taxonomies | Hiérarchie conservée |
Import API (avancé)
L’import WordPress est disponible dans l’admin et via l’API REST. Préférez l’assistant pour le mappage, la résolution des conflits et le suivi.
Les points de terminaison sont sous /_emdash/api/import/wordpress/.
Dépannage
« XML parsing error »
Le fichier d’export peut être corrompu ou incomplet. Réexportez depuis WordPress.
Échecs de téléchargement des médias
Certaines images peuvent être protégées ou déplacées. L’import continue ; les URLs en échec sont journalisées.
Conflits de type de champ
Si une collection a un champ incompatible, l’assistant signale le conflit. Vous pouvez :
- Renommer le champ EmDash
- Modifier le mappage WordPress
- Supprimer et recréer la collection
Gros exports
Au-delà de 100 Mo :
- Exporter les types de publication séparément
- Importer chaque fichier à la suite
- Utiliser la CLI avec
--resume
Étapes suivantes
- Content Import — Autres sources et méthodes
- Plugin Porting — Migrer la logique des plugins WordPress
- Working with Content — Interroger et afficher le contenu importé