Polylang
Integratie met de Polylang-plugin (en ook Polylang PRO).
Het GraphQL-schema krijgt de velden om meertalige gegevens op te halen.
Types Root/QueryRoot
Haal de sitemetadata op die in Polylang is geconfigureerd.
| Veld | Beschrijving |
|---|---|
polylangDefaultLanguage | Standaardtaal in Polylang, of null als er geen talen zijn ingeschakeld. |
polylangLanguages | Lijst van talen in Polylang. |
Als je deze query uitvoert:
{
polylangDefaultLanguage {
code
}
polylangLanguages {
code
}
}...kan dit het volgende opleveren:
{
"data": {
"polylangDefaultLanguage": {
"code": "en"
},
"polylangLanguages": [
{
"code": "en"
},
{
"code": "es"
},
{
"code": "fr"
}
]
}
}Types Post, Page, PostTag, PostCategory en Media
Haal de taal van de entiteit op, evenals de ID's van de vertalingen van die entiteit.
Deze types implementeren de interface PolylangTranslatable. (Type Media doet dit alleen wanneer mediaondersteuning is ingeschakeld via de Polylang-instellingen.)
| Veld | Beschrijving |
|---|---|
polylangLanguage | Taal van het bericht of de pagina, of null als er geen taal is toegewezen (bijv. Polylang is later geïnstalleerd). |
polylangTranslationLanguageIDs | Nodes voor alle vertaaltalen van de entiteit, als een JSON-object met de taalcode als sleutel en de entiteits-ID als waarde, of null als er geen taal is toegewezen (bijv. Polylang is later geïnstalleerd). |
Veld polylangTranslationLanguageIDs geeft de entiteits-ID's voor alle vertalingen (d.w.z. bericht/pagina/categorie/tag/media). Het accepteert invoer includeSelf, om aan te geven of de ID van de bevraagde entiteit in de resultaten moet worden opgenomen (standaard false), en invoer includeLanguages en excludeLanguages, om de opgenomen talen in de resultaten te filteren.
Als je deze query uitvoert:
{
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 })
}
}...kan dit het volgende opleveren:
{
"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
}
}
]
}
}Types GenericCustomPost, GenericTag en GenericCategory
Deze types implementeren de interface PolylangMaybeTranslatable.
GenericCustomPost is een type dat wordt gebruikt om elk custom post-type te vertegenwoordigen dat op de site is geïnstalleerd, zoals Portfolio, Event, Product of andere. Op dezelfde manier worden GenericTag en GenericCategory gebruikt om hun taxonomieën te vertegenwoordigen.
Elk van deze CPT's en taxonomieën kan worden ingesteld als vertaalbaar in de Polylang-instellingen. De velden polylangLanguage en polylangTranslationLanguageIDs hebben dan hetzelfde gedrag als voor Post en de andere types (hierboven beschreven), en geven ook null terug als het CPT of de taxonomie van de entiteit niet is geconfigureerd om te worden vertaald.
Daarnaast geeft het veld polylangIsTranslatable aan of het CPT of de taxonomie is geconfigureerd als vertaalbaar.
| Veld | Beschrijving |
|---|---|
polylangLanguage | Taal van het bericht of de pagina, of null als er geen taal is toegewezen (bijv. Polylang is later geïnstalleerd), of als de entiteit niet is geconfigureerd om te worden vertaald (via Polylang-instellingen). |
polylangTranslationLanguageIDs | Nodes voor alle vertaaltalen van de entiteit, als een JSON-object met de taalcode als sleutel en de entiteits-ID als waarde, of null als er geen taal is toegewezen (bijv. Polylang is later geïnstalleerd), of als de entiteit niet is geconfigureerd om te worden vertaald (via Polylang-instellingen). |
polylangIsTranslatable | Geeft aan of de entiteit vertaald kan worden. |
Als je deze query uitvoert:
{
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 })
}
}
}
}
}...kan dit het volgende opleveren:
{
"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
}
]
}
]
}
}Mutaties
Het GraphQL-schema krijgt mutaties om:
- De taal in te stellen voor custom posts, tags, categorieën en media-items, en
- Koppelingen tussen hen te definiëren (d.w.z. aangeven dat een set custom posts, tags, categorieën of media-items een vertaling van elkaar is).
| Mutatie | Beschrijving |
|---|---|
polylangSetCustomPostLanguage | Stelt de taal van de custom post in. |
polylangSetTaxonomyTermLanguage | Stelt de taal van de taxonomieterm in. |
polylangSetMediaItemLanguage | Stelt de taal van het media-item in. |
polylangSaveCustomPostTranslationAssociation | Stelt de vertaalkoppeling voor de custom post in. |
polylangSaveTaxonomyTermTranslationAssociation | Stelt de vertaalkoppeling voor de taxonomieterm in. |
polylangSaveMediaItemTranslationAssociation | Stelt de vertaalkoppeling voor het media-item in. |
De volgende query definieert bijvoorbeeld de taal voor 3 berichten (naar Engels, Spaans en Frans), en bepaalt vervolgens dat deze 3 berichten vertalingen van elkaar zijn:
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
}
}
}
}Gegevens filteren op taal
Je kunt de taal opgeven om op te filteren bij het ophalen van gegevens voor:
- Berichten
- Pagina's
- Custom posts
- Categorieën
- Tags
- Media-items
De bijbehorende velden accepteren invoer polylangLanguageBy, en je kunt filteren op code of locale, en op 1 of meer talen.
Het doorgeven van $languageCodes: ["es"] haalt bijvoorbeeld gegevens in het Spaans op:
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
}
}