Migrer depuis WordPress

Sur cette page

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éthodeIdéal pourInclut les brouillonsAuth requise
Fichier WXRMigrations complètesOuiNon
WordPress.comSites hébergés sur WordPress.comOuiOAuth
REST API (sonde)Vérifier le contenu avant exportNonOptionnel

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

  1. Exporter depuis WordPress

    Dans l’admin WordPress : Outils → Exporter → Tout le contenu → Télécharger le fichier d’export.

  2. Ouvrir l’assistant d’import

    Dans EmDash : Admin → Réglages → Import → WordPress.

  3. Téléverser le fichier d’export

    Glissez-déposez votre .xml ou parcourez les fichiers. Le fichier est analysé dans le navigateur.

  4. 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
  5. 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
  6. Lancer l’import

    Cliquez sur Importer le contenu. La progression s’affiche pour chaque élément.

  7. 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 GutenbergPortable TextNotes
core/paragraphblock style=“normal”Marques en ligne conservées
core/headingblock style=“h1-h6”Niveau depuis les attributs
core/imagebloc imageRéférence média mise à jour
core/listblock avec type listItemListes ordonnées et non ordonnées
core/quoteblock style=“blockquote”Citation incluse
core/codebloc codeAttribut langue conservé
core/embedbloc embedURL et fournisseur stockés
core/gallerybloc galleryTableau de références d’images
core/columnsbloc columnsContenu imbriqué conservé
Blocs inconnushtmlBlockHTML 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 WordPressStatut EmDash
publishpublished
draftdraft
pendingpending
privateprivate
futurescheduled
trasharchived

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 :

  1. 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)
  2. Correspondance des champs

    Les champs internes WordPress (_edit_, _wp_) sont masqués par défaut. Les champs SEO sont mappés vers un objet seo.

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

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 redirects d’Astro dans astro.config.mjs

Table de correspondance des concepts

WordPressEmDashNotes
register_post_type()Collection dans l’adminCréée via tableau ou API
register_taxonomy()Taxonomie ou champ tableauSelon la complexité
register_meta()Champ dans le schémaTypé, pas clé-valeur
WP_QuerygetCollection(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 pluginSous /_emdash/admin/
add_action/filter()Hooks du pluginhooks.content:beforeSave
wp_optionsctx.kvStockage clé-valeur
wp_postmetaChamps de collectionStructuré
$wpdbctx.storageAccès stockage direct
Catégories/ÉtiquettesTaxonomiesHié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 :

  1. Exporter les types de publication séparément
  2. Importer chaque fichier à la suite
  3. Utiliser la CLI avec --resume

Étapes suivantes