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éthode | Idéale pour | Éléments transférés |
|---|---|---|
importWxr | Contenu portable partagé entre plusieurs sites WordPress sans écraser le contenu existant | Articles, pages, types de publication personnalisés, termes, auteurs, commentaires et références de pièces jointes |
runPHP | Petits jeux de données déterministes et logique personnalisée | Tout ce que le code PHP crée au moyen des API WordPress |
importWordPressFiles | Restauration d’une démo Playground complète | La 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éthode | Taille en entrée | Médiane | Minimum | Maximum | Par rapport au plus rapide |
|---|---|---|---|---|---|
XML / importWxr | 106.0 KiB | 2.21 s | 2.16 s | 2.25 s | 6.90x |
PHP / runPHP | Code généré | 2.78 s | 2.76 s | 2.80 s | 8.68x |
ZIP / importWordPressFiles | 50.5 KiB | 320 ms | 318 ms | 322 ms | 1.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.