Aller au contenu principal

Importation de contenu dans WordPress avec des Blueprints

Un nouveau site WordPress Playground contient initialement du contenu de base. Un Blueprint peut aider à combler ce manque à partir d’un fichier d’exportation WordPress, générer du contenu avec les API WordPress ou restaurer un instantané ZIP de Playground.

Ce guide porte sur le choix d’une méthode Blueprint pour importer du contenu et présente un petit benchmark comparant trois approches. L’importation de données peut être utile pour le contenu de démarrage des thèmes, les jeux de données de test, le contenu pédagogique et d’autres stratégies de création de démos. Pour découvrir d’autres options, consultez Fournir du contenu pour votre démo avec Playground.

Ces approches répondent à des besoins différents :

MéthodeIdéale pourÉléments transférés
importWxrContenu portable partagé entre plusieurs sites WordPress sans écraser le contenu existantArticles, pages, types de publication personnalisés, termes, auteurs, commentaires et références de pièces jointes
runPHPPetits jeux de données déterministes et logique personnaliséeTout ce que le code PHP crée au moyen des API WordPress
importWordPressFilesRestauration d’une démo Playground complèteLa base de données et les fichiers WordPress présents dans le ZIP, notamment les extensions, thèmes et téléversements

Si vous avez seulement besoin d’articles et de termes, commencez par WXR. Si le contenu est généré ou dépend d’une logique de configuration, utilisez runPHP. Si la base de données, les médias, les extensions, les thèmes et les réglages doivent être restaurés ensemble, utilisez un instantané ZIP.

Importer une exportation XML WordPress avec importWxr

WordPress appelle son format d’exportation XML WordPress eXtended RSS, ou WXR. Créez-en un depuis Outils > Exporter dans un site WordPress existant, puis transmettez-le à l’étape importWxr.

Cet exemple suppose que content.xml se trouve à côté de blueprint.json dans un bundle de Blueprint :

{
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
"landingPage": "/wp-admin/edit.php",
"preferredVersions": {
"php": "8.3",
"wp": "7.0"
},
"login": true,
"steps": [
{
"step": "importWxr",
"file": {
"resource": "bundled",
"path": "/content.xml"
},
"fetchAttachments": false,
"rewriteUrls": true,
"importComments": false,
"authorsMode": "default-author",
"defaultAuthorUsername": "admin"
}
]
}

Pour un fichier hébergé, remplacez la ressource bundled par une ressource url. Définissez fetchAttachments sur true lorsque l’outil d’importation doit télécharger les fichiers médias référencés par le fichier WXR. Le transfert réseau peut représenter la majeure partie du temps total de configuration. Le benchmark présenté plus loin désactive donc la récupération des pièces jointes.

importWxr peut également associer les auteurs importés à des comptes locaux, créer des comptes et appliquer des remplacements explicites d’URL. Consultez les options de importWxr avant d’importer du contenu depuis un autre domaine.

Avantages

  • Utilise le format d’échange de contenu standard et portable de WordPress.
  • Conserve les types de publication, taxonomies, métadonnées, auteurs, commentaires et relations de contenu représentés dans l’exportation.
  • Peut récupérer les pièces jointes et réécrire les anciennes URL de contenu pour le nouveau site.
  • Sépare le contenu du cœur de WordPress, des extensions, des thèmes et de la plupart des réglages du site de destination.
  • Est facile à examiner, versionner et modifier manuellement avec n’importe quel éditeur de texte, car la source est en XML.

Inconvénients

  • Ne clone pas l’intégralité du site. Les extensions, thèmes, tables d’extensions, options et fichiers non représentés dans WXR nécessitent des étapes Blueprint distinctes.
  • L’importation des pièces jointes nécessite un accès réseau et dépend de la disponibilité des anciennes URL de médias.
  • Les fichiers XML volumineux nécessitent plus de temps d’analyse et de mémoire que la restauration d’une base de données SQLite existante.
  • Réimporter le même fichier peut créer des doublons ; ce n’est pas un format de synchronisation idempotent.
  • Le Blueprint installe automatiquement la dépendance WordPress Importer, ce qui ajoute du travail de configuration avant le début de l’importation WXR.

Générer du contenu avec runPHP

L’étape runPHP peut appeler directement les API WordPress. Chargez toujours /wordpress/wp-load.php avant d’appeler des fonctions telles que wp_insert_post().

L’exemple suivant crée les 100 articles utilisés par le benchmark :

{
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
"landingPage": "/wp-admin/edit.php",
"preferredVersions": {
"php": "8.3",
"wp": "7.0"
},
"login": true,
"steps": [
{
"step": "runPHP",
"code": "<?php\nrequire_once '/wordpress/wp-load.php';\n\nfor ( $index = 1; $index <= 100; $index++ ) {\n\t$result = wp_insert_post(\n\t\tarray(\n\t\t\t'post_title' => 'Benchmark post ' . $index,\n\t\t\t'post_content' => '<!-- wp:paragraph --><p>Blueprint import benchmark content.</p><!-- /wp:paragraph -->',\n\t\t\t'post_status' => 'publish',\n\t\t\t'post_type' => 'post',\n\t\t),\n\t\ttrue\n\t);\n\tif ( is_wp_error( $result ) ) {\n\t\tthrow new RuntimeException( $result->get_error_message() );\n\t}\n}"
}
]
}

Pour les programmes plus volumineux, conservez le code dans une petite extension ou répartissez la configuration en étapes ciblées au lieu de maintenir une très longue chaîne JSON. Utilisez les API WordPress plutôt que d’écrire directement dans les tables de la base de données afin que les hooks, les caches et la validation des données continuent de fonctionner.

Avantages

  • Offre un contrôle total sur les données générées et leurs relations.
  • Ne nécessite aucun fichier de contenu ni accès réseau.
  • Peut configurer les options, métadonnées, comptes, taxonomies et données propres aux extensions dans la même opération.
  • Convient aux petits jeux de données de test dont la source de référence doit rester le code.
  • Peut devenir idempotent en recherchant les enregistrements existants avant de les créer.

Inconvénients

  • Le PHP personnalisé est plus verbeux que l’exportation de contenu éditorial existant.
  • Le script doit gérer les erreurs, réexécutions, dépendances et échecs partiels.
  • Le code peut devenir dépendant des API ou du modèle de base de données d’une extension.
  • La création de nombreux enregistrements un par un exécute toujours les hooks WordPress et les écritures en base pour chaque enregistrement. Les performances diminuent donc à mesure que le jeu de données augmente.
  • Un Blueprint est une entrée de confiance. Exécutez uniquement du PHP provenant d’une source fiable.

Restaurer un ZIP Playground avec importWordPressFiles

L’étape importWordPressFiles restaure un site ; elle n’importe pas uniquement son contenu. Elle extrait d’un ZIP les fichiers WordPress de premier niveau et remplace les chemins correspondants dans la nouvelle instance. Un ZIP créé avec l’option Download as zip de Playground comprend wp-content, sa base de données SQLite, les téléversements et un manifeste utilisé pour ajuster les URL de portée de Playground.

Placez le fichier téléchargé à côté de blueprint.json et référencez-le comme ressource bundled :

{
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
"landingPage": "/",
"preferredVersions": {
"php": "8.3",
"wp": "7.0"
},
"login": true,
"steps": [
{
"step": "importWordPressFiles",
"wordPressFilesZip": {
"resource": "bundled",
"path": "/site.zip"
}
}
]
}

Le ZIP peut contenir uniquement wp-content, un répertoire WordPress complet ou un répertoire WordPress imbriqué dans un dossier conteneur. Utilisez pathInZip lorsque l’archive contient plusieurs sites ou lorsque la détection automatique de la racine ne suffit pas.

Conservez des versions compatibles de WordPress, PHP, des thèmes et des extensions entre la source et la destination. Cette étape met à niveau la base de données importée et ajuste les URL de portée de Playground, mais ce n’est pas un outil de migration général pour des configurations arbitraires de serveurs de production.

Avantages

  • Restaure ensemble la base de données, les téléversements, les extensions, les thèmes et les réglages.
  • Conserve les tables et options propres aux extensions que WXR ne peut pas représenter.
  • Évite de recréer chaque article au moyen des API WordPress, ce qui peut être efficace pour une démo préparée et reproductible.
  • Fonctionne hors ligne lorsque l’instantané est inclus avec le Blueprint.
  • Produit la copie la plus fidèle de l’instance Playground source.

Inconvénients

  • Remplace tous les chemins de premier niveau présents dans le ZIP. Il peut donc écraser l’état existant du site au lieu d’y fusionner du contenu.
  • Est plus volumineux, opaque et difficile à examiner ou à résoudre lors des fusions du contrôle de version.
  • Lie l’instantané à ses versions de WordPress, PHP, thèmes, extensions et base de données plus étroitement que WXR.
  • Ne convient pas à l’importation d’articles sélectionnés dans un site existant.
  • Doit uniquement être restauré depuis une source fiable ; il peut contenir du PHP exécutable et une base de données entière.

Résultats des tests pour les différentes méthodes

Les résultats des tests suivants ont été mesurés le 13 juillet 2026 sur un Apple M4 Pro doté de 24 Go de mémoire. Ils utilisent Node.js 22.16, WordPress 7.0, PHP 8.3, 100 articles et cinq séries avec un nouveau site pour chaque méthode :

MéthodeTaille en entréeMédianeMinimumMaximumPar rapport au plus rapide
XML / importWxr106.0 KiB2.21 s2.16 s2.25 s6.90x
PHP / runPHPCode généré2.78 s2.76 s2.80 s8.68x
ZIP / importWordPressFiles50.5 KiB320 ms318 ms322 ms1.00x

Considérez ces valeurs comme une référence provenant d’une seule machine, et non comme un classement universel. La structure du jeu de données compte : les pièces jointes favorisent un ZIP autonome, des hooks WordPress complexes peuvent ralentir runPHP et la portabilité de WXR peut être plus importante que la vitesse brute.

Autres sources de contenu

Les Blueprints prennent également en charge importThemeStarterContent pour le contenu de démarrage enregistré d’un thème et l’étape wp-cli pour des commandes telles que wp post generate. Ces méthodes sont utiles lorsque le thème ou la commande WP-CLI constitue déjà la source canonique des données de la démo, mais elles ne font pas partie de ce benchmark d’importation de contenu.