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.
| Alan | Açıklama |
|---|---|
polylangDefaultLanguage | Polylang'daki varsayılan dil ya da etkin dil yoksa null. |
polylangLanguages | Polylang'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.)
| Alan | Açıklama |
|---|---|
polylangLanguage | Yazı veya sayfanın dili ya da dil atanmamışsa null (örn: Polylang sonradan kurulmuşsa). |
polylangTranslationLanguageIDs | Varlığ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.
| Alan | Açıklama |
|---|---|
polylangLanguage | Yazı 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). |
polylangTranslationLanguageIDs | Varlığ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). |
polylangIsTranslatable | Varlığı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).
| Mutation | Açıklama |
|---|---|
polylangSetCustomPostLanguage | Özel gönderinin dilini ayarlar. |
polylangSetTaxonomyTermLanguage | Taksonomi teriminin dilini ayarlar. |
polylangSetMediaItemLanguage | Medya öğesinin dilini ayarlar. |
polylangSaveCustomPostTranslationAssociation | Özel gönderi için çeviri ilişkilendirmesini ayarlar. |
polylangSaveTaxonomyTermTranslationAssociation | Taksonomi terimi için çeviri ilişkilendirmesini ayarlar. |
polylangSaveMediaItemTranslationAssociation | Medya öğ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
}
}