Polylang
PolylangPolylang

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.

VeldBeschrijving
polylangDefaultLanguageStandaardtaal in Polylang, of null als er geen talen zijn ingeschakeld.
polylangLanguagesLijst 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.)

VeldBeschrijving
polylangLanguageTaal van het bericht of de pagina, of null als er geen taal is toegewezen (bijv. Polylang is later geïnstalleerd).
polylangTranslationLanguageIDsNodes 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.

VeldBeschrijving
polylangLanguageTaal 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).
polylangTranslationLanguageIDsNodes 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).
polylangIsTranslatableGeeft 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).
MutatieBeschrijving
polylangSetCustomPostLanguageStelt de taal van de custom post in.
polylangSetTaxonomyTermLanguageStelt de taal van de taxonomieterm in.
polylangSetMediaItemLanguageStelt de taal van het media-item in.
polylangSaveCustomPostTranslationAssociationStelt de vertaalkoppeling voor de custom post in.
polylangSaveTaxonomyTermTranslationAssociationStelt de vertaalkoppeling voor de taxonomieterm in.
polylangSaveMediaItemTranslationAssociationStelt 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
  }
}