Tutoriel du schéma
Tutoriel du schémaLeçon 8 : Migrations de site

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/"
}