Şema eğitimi
Şema eğitimiDers 8: Site Taşımaları

Ders 8: Site Taşımaları

Siteyi yeni bir alana taşırken, sayfaları farklı bir URL'ye taşırken veya başka durumlarda içeriği uyarlamak için bir grup GraphQL queries çalıştırabiliriz.

Bu GraphQL query'nin çalışması için, endpoint'e uygulanan Şema Yapılandırması'nda İç İçe Mutations etkinleştirilmiş olmalıdır

İçeriği yeni alana uyarlama

Bu GraphQL query önce içeriğinde "https://my-old-domain.com" geçen tüm gönderileri filtreler ve bu dizeyi "https://my-new-domain.com" ile değiştirir:

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

İçeriği yeni gönderi veya sayfa URL'sine uyarlama

Bir gönderi veya sayfanın slug'ını değiştirdikten sonra, tüm içeriği yeni URL'ye işaret edecek şekilde dönüştürebiliriz.

Bu GraphQL query önce sayfanın eski ve yeni URL'lerini yeniden oluşturmak için WordPress "siteurl" ayarından alan adını alır:

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

Ardından eski ve yeni sayfa slug'larını variables sözlüğü aracılığıyla sağlarız:

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