Polylang
Intégration avec le plugin Polylang (et aussi Polylang PRO).
Le schéma GraphQL est enrichi des champs pour récupérer des données multilingues.
Types Root/QueryRoot
Interrogez les métadonnées du site configurées dans Polylang.
| Champ | Description |
|---|---|
polylangDefaultLanguage | Langue par défaut dans Polylang, ou null si aucune langue n'est activée. |
polylangLanguages | Liste des langues dans Polylang. |
En exécutant cette requête :
{
polylangDefaultLanguage {
code
}
polylangLanguages {
code
}
}...pourrait produire :
{
"data": {
"polylangDefaultLanguage": {
"code": "en"
},
"polylangLanguages": [
{
"code": "en"
},
{
"code": "es"
},
{
"code": "fr"
}
]
}
}Types Post, Page, PostTag, PostCategory et Media
Interrogez la langue de l'entité, et les IDs des traductions de cette entité.
Ces types implémentent l'interface PolylangTranslatable. (Le type Media ne le fait que lorsque le support des médias est activé, via les paramètres Polylang.)
| Champ | Description |
|---|---|
polylangLanguage | Langue de l'article ou de la page, ou null si aucune langue n'a été assignée (p. ex. : Polylang a été installé plus tard). |
polylangTranslationLanguageIDs | Nœuds pour toutes les langues de traduction de l'entité, sous forme d'objet JSON avec le code de langue comme clé et l'ID de l'entité comme valeur, ou null si aucune langue n'a été assignée (p. ex. : Polylang a été installé plus tard). |
Le champ polylangTranslationLanguageIDs fournit les IDs d'entité pour toutes les traductions (c'est-à-dire post/page/category/tag/media). Il accepte l'entrée includeSelf, pour indiquer si l'ID de l'entité interrogée doit être inclus dans les résultats (il est false par défaut), et les entrées includeLanguages et excludeLanguages, pour filtrer les langues incluses dans les résultats.
En exécutant cette requête :
{
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 })
}
}...pourrait produire :
{
"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 et GenericCategory
Ces types implémentent l'interface PolylangMaybeTranslatable.
GenericCustomPost est un type utilisé pour représenter n'importe quel custom post installé sur le site, comme Portfolio, Event, Product, ou autre. De même, GenericTag et GenericCategory sont utilisés pour représenter leurs taxonomies.
Chacun de ces CPTs et taxonomies peut être défini comme traduisible dans les paramètres Polylang. Les champs polylangLanguage et polylangTranslationLanguageIDs auront alors le même comportement que pour Post et les autres (décrits ci-dessus), et retourneront également null si le CPT ou la taxonomie de l'entité n'est pas configuré(e) pour être traduit(e).
De plus, le champ polylangIsTranslatable indique si le CPT ou la taxonomie est configuré(e) comme traduisible.
| Champ | Description |
|---|---|
polylangLanguage | Langue de l'article ou de la page, ou null si aucune langue n'a été assignée (p. ex. : Polylang a été installé plus tard), ou si l'entité n'est pas configurée pour être traduite (via les Paramètres Polylang). |
polylangTranslationLanguageIDs | Nœuds pour toutes les langues de traduction de l'entité, sous forme d'objet JSON avec le code de langue comme clé et l'ID de l'entité comme valeur, ou null si aucune langue n'a été assignée (p. ex. : Polylang a été installé plus tard), ou si l'entité n'est pas configurée pour être traduite (via les Paramètres Polylang). |
polylangIsTranslatable | Indique si l'entité peut être traduite. |
En exécutant cette requête :
{
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 })
}
}
}
}
}...pourrait produire :
{
"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
Le schéma GraphQL est enrichi de mutations pour :
- Établir la langue pour les custom posts, les étiquettes, les catégories et les éléments multimédias, et
- Définir des associations entre eux (c'est-à-dire indiquer qu'un ensemble de custom posts, d'étiquettes, de catégories ou d'éléments multimédias est une traduction les uns des autres).
| Mutation | Description |
|---|---|
polylangSetCustomPostLanguage | Définit la langue du custom post. |
polylangSetTaxonomyTermLanguage | Définit la langue du terme de taxonomie. |
polylangSetMediaItemLanguage | Définit la langue de l'élément multimédia. |
polylangSaveCustomPostTranslationAssociation | Définit l'association de traduction pour le custom post. |
polylangSaveTaxonomyTermTranslationAssociation | Définit l'association de traduction pour le terme de taxonomie. |
polylangSaveMediaItemTranslationAssociation | Définit l'association de traduction pour l'élément multimédia. |
Par exemple, la requête suivante définit la langue de 3 articles (en anglais, espagnol et français), puis définit que ces 3 articles sont une traduction les uns des autres :
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
}
}
}
}Filtrer les données par langue
Nous pouvons fournir la langue par laquelle filtrer lors de la récupération de données pour :
- Posts
- Pages
- Custom posts
- Catégories
- Étiquettes
- Éléments multimédias
Les champs correspondants reçoivent l'entrée polylangLanguageBy, et nous pouvons filtrer par code ou locale, et par 1 ou plusieurs langues.
Par exemple, passer $languageCodes: ["es"] récupérera les données en espagnol :
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
}
}