Samouczek schematu
Samouczek schematuLekcja 8: Migracje witryny

Lekcja 8: Migracje witryny

Możemy wykonać serię queries GraphQL, aby dostosować zawartość witryny podczas jej migracji do nowej domeny, przenoszenia stron pod inny URL lub w innych przypadkach.

Aby ta query GraphQL działała, Konfiguracja Schema zastosowana do endpointu musi mieć włączone Zagnieżdżone Mutacje

Dostosowywanie treści do nowej domeny

Ta query GraphQL najpierw filtruje wszystkie posty zawierające "https://my-old-domain.com" w swojej treści, a następnie zastępuje ten ciąg znaków przez "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
      }
    }
  }
}

Dostosowywanie treści do nowego URL posta lub strony

Po zmianie slugu posta lub strony możemy przekonwertować całą zawartość tak, aby wskazywała na nowy URL.

Ta query GraphQL najpierw pobiera domenę z ustawień WordPress "siteurl", aby odtworzyć stary i nowy URL strony:

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

Następnie podajemy stary i nowy slug strony za pomocą słownika variables:

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