Schema-tutorial
Schema-tutorialLes 8: Site-migraties

Les 8: Site-migraties

We kunnen een reeks GraphQL-queries uitvoeren om de inhoud van de site aan te passen bij het migreren naar een nieuw domein, het verplaatsen van pagina's naar een andere URL, of andere gevallen.

Om deze GraphQL-query te laten werken, moet de Schema-configuratie die op het eindpunt is toegepast Geneste Mutaties hebben ingeschakeld

Inhoud aanpassen aan het nieuwe domein

Deze GraphQL-query filtert eerst alle posts die "https://my-old-domain.com" bevatten in de inhoud, en vervangt deze tekenreeks door "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
      }
    }
  }
}

Inhoud aanpassen aan een nieuwe URL van een bericht of pagina

Na het wijzigen van de slug van een bericht of pagina kunnen we alle inhoud omzetten zodat deze naar de nieuwe URL verwijst.

Deze GraphQL-query haalt eerst het domein op uit de WordPress-instelling "siteurl" om de oude en nieuwe URL van de pagina te reconstrueren:

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

Vervolgens geven we de oude en nieuwe pagina-slugs op via het woordenboek variables:

{
  "oldPageSlug": "/privacy/",
  "newPageSlug": "/user-privacy/"
}