Leçon 8 : Migrations de site
Nous pouvons exécuter un lot de requêtes GraphQL pour adapter le contenu du site lors de sa migration vers un nouveau domaine, du déplacement de pages vers une URL différente, ou autres.
Pour que cette requête GraphQL fonctionne, la Configuration du schéma appliquée à l'endpoint doit avoir les Mutations imbriquées activées
Adaptation du contenu au nouveau domaine
Cette requête GraphQL filtre d'abord toutes les publications contenant "https://my-old-domain.com" dans leur contenu, et remplace cette chaîne par "https://my-new-domain.com" :
mutation ReplaceOldWithNewDomainInPosts {
posts(
filter: {
search: "https://my-old-domain.com"
}
) {
id
rawContent
adaptedRawContent: _strReplace(
search: "https://my-old-domain.com"
replaceWith: "https://my-new-domain.com"
in: $__rawContent
)
update(input: {
contentAs: { html: $__adaptedRawContent }
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
id
rawContent
}
}
}
}Adaptation du contenu à une nouvelle URL de publication ou de page
Après avoir modifié le slug d'une publication ou d'une page, nous pouvons convertir tout le contenu pour qu'il pointe vers la nouvelle URL.
Cette requête GraphQL récupère d'abord le domaine depuis le paramètre WordPress "siteurl" pour recréer les anciennes et nouvelles URLs de la page :
query ExportData(
$oldPageSlug: String!
$newPageSlug: String!
) {
siteURL: optionValue(name: "siteurl")
oldPageURL: _strAppend(
after: $__siteURL,
append: $oldPageSlug
) @export(as: "oldPageURL")
newPageURL: _strAppend(
after: $__siteURL,
append: $newPageSlug
) @export(as: "newPageURL")
}
mutation ReplaceOldWithNewURLInPosts
@depends(on: "ExportData")
{
posts(
filter: {
search: $oldPageURL
},
sort: { by: ID, order: ASC }
) {
id
rawContent
adaptedRawContent: _strReplace(
search: $oldPageURL
replaceWith: $newPageURL
in: $__rawContent
)
update(input: {
contentAs: { html: $__adaptedRawContent }
}) {
status
errors {
__typename
...on ErrorPayload {
message
}
}
post {
id
rawContent
}
}
}
}Nous fournissons ensuite les anciens et nouveaux slugs de page via le dictionnaire variables :
{
"oldPageSlug": "/privacy/",
"newPageSlug": "/user-privacy/"
}