Polylang
Integration mit dem Plugin Polylang (und auch Polylang PRO).
Das GraphQL-Schema wird um Felder erweitert, um mehrsprachige Daten abzurufen.
Typen Root/QueryRoot
Frage die in Polylang konfigurierten Website-Metadaten ab.
| Feld | Beschreibung |
|---|---|
polylangDefaultLanguage | Standardsprache in Polylang, oder null wenn keine Sprachen aktiviert sind. |
polylangLanguages | Liste der Sprachen in Polylang. |
Wenn du diese query ausführst:
{
polylangDefaultLanguage {
code
}
polylangLanguages {
code
}
}...könnte das Ergebnis so aussehen:
{
"data": {
"polylangDefaultLanguage": {
"code": "en"
},
"polylangLanguages": [
{
"code": "en"
},
{
"code": "es"
},
{
"code": "fr"
}
]
}
}Typen Post, Page, PostTag, PostCategory und Media
Frage die Sprache der Entität und die IDs der Übersetzungen dieser Entität ab.
Diese Typen implementieren das Interface PolylangTranslatable. (Typ Media tut dies nur, wenn die Medienunterstützung aktiviert ist, über die Polylang-Einstellungen.)
| Feld | Beschreibung |
|---|---|
polylangLanguage | Sprache des Beitrags oder der Seite, oder null wenn keine Sprache zugewiesen wurde (z. B.: Polylang wurde nachträglich installiert). |
polylangTranslationLanguageIDs | Knoten für alle Übersetzungssprachen der Entität als JSON-Objekt mit dem Sprachcode als Schlüssel und der Entitäts-ID als Wert, oder null wenn keine Sprache zugewiesen wurde (z. B.: Polylang wurde nachträglich installiert). |
Das Feld polylangTranslationLanguageIDs liefert die Entitäts-IDs für alle Übersetzungen (d. h. post/page/category/tag/media). Es akzeptiert den Input includeSelf, um anzugeben, ob die ID der abgefragten Entität in den Ergebnissen enthalten sein soll (standardmäßig false), sowie die Inputs includeLanguages und excludeLanguages, um die einbezogenen Sprachen in den Ergebnissen zu filtern.
Wenn du diese query ausführst:
{
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 })
}
}...könnte das Ergebnis so aussehen:
{
"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
}
}
]
}
}Typen GenericCustomPost, GenericTag und GenericCategory
Diese Typen implementieren das Interface PolylangMaybeTranslatable.
GenericCustomPost ist ein Typ, der verwendet wird, um beliebige auf der Website installierte Custom Posts darzustellen, wie Portfolio, Event, Product oder andere. Ebenso werden GenericTag und GenericCategory verwendet, um ihre jeweiligen Taxonomien darzustellen.
Jeder dieser CPTs und Taxonomien kann in den Polylang-Einstellungen als übersetzbar definiert werden. Die Felder polylangLanguage und polylangTranslationLanguageIDs verhalten sich dann genauso wie für Post und die anderen (oben beschrieben), und geben ebenfalls null zurück, wenn der CPT oder die Taxonomie der Entität nicht für die Übersetzung konfiguriert ist.
Zusätzlich gibt das Feld polylangIsTranslatable an, ob der CPT oder die Taxonomie als übersetzbar konfiguriert ist.
| Feld | Beschreibung |
|---|---|
polylangLanguage | Sprache des Beitrags oder der Seite, oder null wenn keine Sprache zugewiesen wurde (z. B.: Polylang wurde nachträglich installiert), oder wenn die Entität nicht für die Übersetzung konfiguriert ist (über die Polylang-Einstellungen). |
polylangTranslationLanguageIDs | Knoten für alle Übersetzungssprachen der Entität als JSON-Objekt mit dem Sprachcode als Schlüssel und der Entitäts-ID als Wert, oder null wenn keine Sprache zugewiesen wurde (z. B.: Polylang wurde nachträglich installiert), oder wenn die Entität nicht für die Übersetzung konfiguriert ist (über die Polylang-Einstellungen). |
polylangIsTranslatable | Gibt an, ob die Entität übersetzt werden kann. |
Wenn du diese query ausführst:
{
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 })
}
}
}
}
}...könnte das Ergebnis so aussehen:
{
"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
}
]
}
]
}
}Mutationen
Das GraphQL-Schema wird um Mutationen erweitert, um:
- Die Sprache für Custom Posts, Tags, Kategorien und Medienelemente festzulegen, und
- Verknüpfungen zwischen ihnen zu definieren (d. h. anzugeben, dass eine Gruppe von Custom Posts, Tags, Kategorien oder Medienelementen eine Übersetzung voneinander ist).
| Mutation | Beschreibung |
|---|---|
polylangSetCustomPostLanguage | Setzt die Sprache des Custom Posts. |
polylangSetTaxonomyTermLanguage | Setzt die Sprache des Taxonomiebegriffs. |
polylangSetMediaItemLanguage | Setzt die Sprache des Medienelements. |
polylangSaveCustomPostTranslationAssociation | Setzt die Übersetzungsverknüpfung für den Custom Post. |
polylangSaveTaxonomyTermTranslationAssociation | Setzt die Übersetzungsverknüpfung für den Taxonomiebegriff. |
polylangSaveMediaItemTranslationAssociation | Setzt die Übersetzungsverknüpfung für das Medienelement. |
Die folgende query definiert beispielsweise die Sprache für 3 Beiträge (Englisch, Spanisch und Französisch) und legt dann fest, dass diese 3 Beiträge eine Übersetzung voneinander sind:
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
}
}
}
}Daten nach Sprache filtern
Wir können die Sprache angeben, nach der beim Abrufen von Daten gefiltert werden soll, für:
- Posts
- Seiten
- Custom Posts
- Kategorien
- Tags
- Medienelemente
Die entsprechenden Felder erhalten den Input polylangLanguageBy, und wir können nach Code oder Locale sowie nach einer oder mehreren Sprachen filtern.
Wenn du beispielsweise $languageCodes: ["es"] übergibst, werden Daten auf Spanisch abgerufen:
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
}
}