Polylang
PolylangPolylang

Polylang

Polylang eklentisiyle (ve aynı zamanda Polylang PRO ile) entegrasyon.

GraphQL şemasına çok dilli verileri almak için gerekli alanlar eklenir.

Root/QueryRoot Türleri

Polylang'da yapılandırılmış site meta verilerini sorgular.

AlanAçıklama
polylangDefaultLanguagePolylang'daki varsayılan dil ya da etkin dil yoksa null.
polylangLanguagesPolylang'daki dillerin listesi.

Bu query çalıştırıldığında:

{
  polylangDefaultLanguage {
    code
  }
  polylangLanguages {
    code
  }
}

...şu sonucu üretebilir:

{
  "data": {
    "polylangDefaultLanguage": {
      "code": "en"
    },
    "polylangLanguages": [
      {
        "code": "en"
      },
      {
        "code": "es"
      },
      {
        "code": "fr"
      }
    ]
  }
}

Post, Page, PostTag, PostCategory ve Media Türleri

Varlığın dilini ve o varlığa ait çevirilerin ID'lerini sorgular.

Bu türler PolylangTranslatable arayüzünü uygular. (Media türü bunu yalnızca Polylang ayarları aracılığıyla medya desteği etkinleştirildiğinde yapar.)

AlanAçıklama
polylangLanguageYazı veya sayfanın dili ya da dil atanmamışsa null (örn: Polylang sonradan kurulmuşsa).
polylangTranslationLanguageIDsVarlığa ait tüm çeviri dilleri için düğümler; dil kodu anahtar, varlık ID'si değer olmak üzere JSON nesnesi biçiminde ya da dil atanmamışsa null (örn: Polylang sonradan kurulmuşsa).

polylangTranslationLanguageIDs alanı tüm çeviriler için varlık ID'lerini sağlar (yani post/page/category/tag/media). includeSelf girdisini kabul eder; bu girdi sorgulanan varlığın ID'sinin sonuçlara dahil edilip edilmeyeceğini belirtir (varsayılan olarak false'tur). Ayrıca includeLanguages ve excludeLanguages girdileriyle sonuçlardaki diller filtrelenebilir.

Bu query çalıştırıldığında:

{
  posts {
    __typename
    id
    title
    polylangLanguage {
      code
    }
    polylangTranslationLanguageIDs
    polylangTranslationLanguageIDsWithSelf: polylangTranslationLanguageIDs(filter: { includeSelf: true })
 
    categories {
      __typename
      id
      name
      polylangLanguage {
        code
      }
      polylangTranslationLanguageIDs
      polylangTranslationLanguageIDsWithSelf: polylangTranslationLanguageIDs(filter: { includeSelf: true })
    }
    
    tags {
      __typename
      id
      name
      polylangLanguage {
        code
      }
      polylangTranslationLanguageIDs
      polylangTranslationLanguageIDsWithSelf: polylangTranslationLanguageIDs(filter: { includeSelf: true })
    }
  }
 
  pages {
    __typename
    id
    title
    polylangLanguage {
      code
    }
    polylangTranslationLanguageIDs
    polylangTranslationLanguageIDsWithSelf: polylangTranslationLanguageIDs(filter: { includeSelf: true })
  }
 
  mediaItems {
    __typename
    id
    title
    polylangLanguage {
      code
    }
    polylangTranslationLanguageIDs
    polylangTranslationLanguageIDsWithSelf: polylangTranslationLanguageIDs(filter: { includeSelf: true })
  }
}

...şu sonucu üretebilir:

{
  "data": {
    "posts": [
      {
        "__typename": "Post",
        "id": 1668,
        "title": "Some post translated using Polylang",
        "polylangLanguage": {
          "code": "en"
        },
        "polylangTranslationLanguageIDs": {
          "fr": 1670,
          "es": 1672
        },
        "polylangTranslationLanguageIDsWithSelf": {
          "en": 1668,
          "fr": 1670,
          "es": 1672
        },
        "categories": [
          {
            "__typename": "PostCategory",
            "id": 61,
            "name": "Category for Polylang",
            "polylangLanguage": {
              "code": "en"
            },
            "polylangTranslationLanguageIDs": {
              "fr": 63,
              "es": 65
            },
            "polylangTranslationLanguageIDsWithSelf": {
              "en": 61,
              "fr": 63,
              "es": 65
            }
          }
        ],
        "tags": [
          {
            "__typename": "PostTag",
            "id": 67,
            "name": "Tag for Polylang",
            "polylangLanguage": {
              "code": "en"
            },
            "polylangTranslationLanguageIDs": {
              "fr": 69,
              "es": 71
            },
            "polylangTranslationLanguageIDsWithSelf": {
              "en": 67,
              "fr": 69,
              "es": 71
            }
          }
        ]
      }
    ],
    "pages": [
      {
        "__typename": "Page",
        "id": 1674,
        "title": "Some page translated using Polylang",
        "polylangLanguage": {
          "code": "en"
        },
        "polylangTranslationLanguageIDs": {
          "fr": 1676,
          "es": 1678
        },
        "polylangTranslationLanguageIDsWithSelf": {
          "en": 1674,
          "fr": 1676,
          "es": 1678
        }
      }
    ],
    "mediaItems": [
      {
        "__typename": "Media",
        "id": 40,
        "title": "Media-for-Polylang",
        "polylangLanguage": {
          "code": "en"
        },
        "polylangTranslationLanguageIDs": {
          "fr": 42,
          "es": 44
        },
        "polylangTranslationLanguageIDsWithSelf": {
          "en": 40,
          "fr": 42,
          "es": 44
        }
      }
    ]
  }
}

GenericCustomPost, GenericTag ve GenericCategory Türleri

Bu türler PolylangMaybeTranslatable arayüzünü uygular.

GenericCustomPost, sitede kurulu herhangi bir özel gönderiyi (custom post) temsil etmek için kullanılan bir türdür; Portfolio, Event, Product gibi. Benzer şekilde, GenericTag ve GenericCategory kendi taksonomilerini temsil eder.

Bu CPT'lerin ve taksonomilerin her biri Polylang ayarlarında çevrilebilir olarak tanımlanabilir. polylangLanguage ve polylangTranslationLanguageIDs alanları, yukarıda Post ve diğerleri için açıklananlarla aynı davranışı sergiler; varlığın CPT'si veya taksonomisi çevrilmek üzere yapılandırılmamışsa da null döner.

Bunun yanı sıra polylangIsTranslatable alanı, CPT veya taksonominin çevrilebilir olarak yapılandırılıp yapılandırılmadığını gösterir.

AlanAçıklama
polylangLanguageYazı veya sayfanın dili ya da dil atanmamışsa null (örn: Polylang sonradan kurulmuşsa) ya da varlık çevrilmek üzere yapılandırılmamışsa (Polylang Ayarları aracılığıyla).
polylangTranslationLanguageIDsVarlığa ait tüm çeviri dilleri için düğümler; dil kodu anahtar, varlık ID'si değer olmak üzere JSON nesnesi biçiminde ya da dil atanmamışsa null (örn: Polylang sonradan kurulmuşsa) ya da varlık çevrilmek üzere yapılandırılmamışsa (Polylang Ayarları aracılığıyla).
polylangIsTranslatableVarlığın çevrilebilir olup olmadığını gösterir.

Bu query çalıştırıldığında:

{
  customPosts(filter: { customPostTypes: ["some-cpt", "another-cpt"] }) {
    __typename
    ...on GenericCustomPost {
      id
      title
      customPostType
      polylangIsTranslatable
      polylangLanguage {
        code
      }
      polylangTranslationLanguageIDs
      polylangTranslationLanguageIDsWithSelf: polylangTranslationLanguageIDs(filter: { includeSelf: true })
      
      categories(taxonomy: "some-category") {
        __typename
        ...on GenericCategory {
          id
          name
          polylangIsTranslatable
          polylangLanguage {
            code
          }
          polylangTranslationLanguageIDs
          polylangTranslationLanguageIDsWithSelf: polylangTranslationLanguageIDs(filter: { includeSelf: true })
        }
      }
      
      tags(taxonomy: "some-tag") {
        __typename
        ...on GenericTag {
          id
          name
          polylangIsTranslatable
          polylangLanguage {
            code
          }
          polylangTranslationLanguageIDs
          polylangTranslationLanguageIDsWithSelf: polylangTranslationLanguageIDs(filter: { includeSelf: true })
        }
      }
    }
  }
}

...şu sonucu üretebilir:

{
  "data": {
    "customPosts": [
      {
        "__typename": "GenericCustomPost",
        "id": 10,
        "title": "Some CPT that has Polylang translation enabled",
        "customPostType": "some-cpt",
        "polylangIsTranslatable": true,
        "polylangLanguage": {
          "code": "en"
        },
        "polylangTranslationLanguageIDs": {
          "fr": 12,
          "es": 14
        },
        "polylangTranslationLanguageIDsWithSelf": {
          "en": 10,
          "fr": 12,
          "es": 14
        },
        "categories": [
          {
            "__typename": "GenericCategory",
            "id": 30,
            "name": "Some Category for Polylang",
            "polylangIsTranslatable": true,
            "polylangLanguage": {
              "code": "en"
            },
            "polylangTranslationLanguageIDs": {
              "fr": 32,
              "es": 34
            },
            "polylangTranslationLanguageIDsWithSelf": {
              "en": 30,
              "fr": 32,
              "es": 34
            }
          }
        ],
        "tags": [
          {
            "__typename": "GenericTag",
            "id": 50,
            "name": "Some Tag for Polylang",
            "polylangIsTranslatable": true,
            "polylangLanguage": {
              "code": "en"
            },
            "polylangTranslationLanguageIDs": {
              "fr": 52,
              "es": 54
            },
            "polylangTranslationLanguageIDsWithSelf": {
              "en": 50,
              "fr": 52,
              "es": 54
            }
          }
        ]
      },
      {
        "__typename": "GenericCustomPost",
        "id": 20,
        "title": "Another CPT that does not have Polylang translation enabled",
        "customPostType": "another-cpt",
        "polylangIsTranslatable": false,
        "polylangLanguage": null,
        "polylangTranslationLanguageIDs": null,
        "polylangTranslationLanguageIDsWithSelf": null,
        "categories": [
          {
            "__typename": "GenericCategory",
            "id": 70,
            "name": "Category without support for Polylang",
            "polylangIsTranslatable": false,
            "polylangLanguage": null,
            "polylangTranslationLanguageIDs": null,
            "polylangTranslationLanguageIDsWithSelf": null
          }
        ],
        "tags": [
          {
            "__typename": "GenericTag",
            "id": 72,
            "name": "Tag without support for Polylang",
            "polylangIsTranslatable": false,
            "polylangLanguage": null,
            "polylangTranslationLanguageIDs": null,
            "polylangTranslationLanguageIDsWithSelf": null
          }
        ]
      }
    ]
  }
}

Mutations

GraphQL şemasına şunlar için mutations eklenir:

  • Özel gönderiler, etiketler, kategoriler ve medya öğeleri için dil belirleme ve
  • Bunlar arasında ilişkilendirme tanımlama (yani bir özel gönderi, etiket, kategori veya medya öğesi kümesinin birbirinin çevirisi olduğunu belirtme).
MutationAçıklama
polylangSetCustomPostLanguageÖzel gönderinin dilini ayarlar.
polylangSetTaxonomyTermLanguageTaksonomi teriminin dilini ayarlar.
polylangSetMediaItemLanguageMedya öğesinin dilini ayarlar.
polylangSaveCustomPostTranslationAssociationÖzel gönderi için çeviri ilişkilendirmesini ayarlar.
polylangSaveTaxonomyTermTranslationAssociationTaksonomi terimi için çeviri ilişkilendirmesini ayarlar.
polylangSaveMediaItemTranslationAssociationMedya öğesi için çeviri ilişkilendirmesini ayarlar.

Örneğin aşağıdaki query, 3 gönderi için dil tanımlar (İngilizce, İspanyolca ve Fransızca) ve ardından bu 3 gönderinin birbirinin çevirisi olduğunu belirtir:

mutation {
  post1: polylangSetCustomPostLanguage(input: {id: 1, languageBy: { code: "en" }}) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
  post2: polylangSetCustomPostLanguage(input: {id: 2, languageBy: { code: "es" }}) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
  post3: polylangSetCustomPostLanguage(input: {id: 3, languageBy: { code: "fr" }}) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
  polylangSaveCustomPostTranslationAssociation(input: {
    ids: [1, 2, 3]
  }) {
    status
    errors {
      __typename
      ...on ErrorPayload {
        message
      }
    }
  }
}

Verileri dile göre filtreleme

Aşağıdaki verileri çekerken filtrelemek için dil belirtebiliriz:

  • Yazılar
  • Sayfalar
  • Özel gönderiler
  • Kategoriler
  • Etiketler
  • Medya öğeleri

İlgili alanlar polylangLanguageBy girdisini alır; koda veya yerel ayara göre, ayrıca 1 veya daha fazla dille filtreleme yapılabilir.

Örneğin $languageCodes: ["es"] geçirildiğinde İspanyolca veriler çekilir:

query FilterByLanguage($languageCodes: [String!])
{
  posts(filter: {
    polylangLanguagesBy: { codes: $languageCodes }
  }) {
    id
    title
  }
 
  pages(filter: {
    polylangLanguagesBy: { codes: $languageCodes }
  }) {
    id
    title
  }
 
  customPosts(filter: {
    customPostTypes: ["some-cpt"]
    polylangLanguagesBy: { codes: $languageCodes }
  }) {
    id
    title
  }
 
  postCategories(filter: {
    polylangLanguagesBy: { codes: $languageCodes }
  }) {
    id
    name
  }
 
  postTags(filter: {
    polylangLanguagesBy: { codes: $languageCodes }
  }) {
    id
    name
  }
 
  categories(
    taxonomy: "some-category"
    filter: { polylangLanguagesBy: { codes: $languageCodes } }
  ) {
    id
    name
  }
 
  tags(
    taxonomy: "some-tag"
    filter: { polylangLanguagesBy: { codes: $languageCodes } }
  ) {
    id
    name
  }
 
  mediaItems(filter: {
    polylangLanguagesBy: { codes: $languageCodes }
  }) {
    id
    title
  }
}