Polylang
Polylangプラグイン(および Polylang PRO)との統合です。
GraphQLスキーマには、多言語データを取得するためのフィールドが提供されます。
タイプ Root/QueryRoot
Polylangで設定されたサイトメタデータを取得します。
| フィールド | 説明 |
|---|---|
polylangDefaultLanguage | Polylangのデフォルト言語。有効な言語がない場合は null。 |
polylangLanguages | Polylangの言語一覧。 |
このクエリを実行すると:
{
polylangDefaultLanguage {
code
}
polylangLanguages {
code
}
}...次のような結果が返ってきます:
{
"data": {
"polylangDefaultLanguage": {
"code": "en"
},
"polylangLanguages": [
{
"code": "en"
},
{
"code": "es"
},
{
"code": "fr"
}
]
}
}タイプ Post、Page、PostTag、PostCategory、Media
エンティティの言語と、そのエンティティの翻訳IDを取得します。
これらのタイプはインターフェース PolylangTranslatable を実装しています。(タイプ Media は、Polylangの設定でメディアサポートが有効になっている場合のみ対象となります。)
| フィールド | 説明 |
|---|---|
polylangLanguage | 投稿またはページの言語。言語が割り当てられていない場合は null(例:Polylangが後からインストールされた場合)。 |
polylangTranslationLanguageIDs | エンティティのすべての翻訳言語のノード。言語コードをキー、エンティティIDを値とするJSONオブジェクト。言語が割り当てられていない場合は null(例:Polylangが後からインストールされた場合)。 |
フィールド polylangTranslationLanguageIDs は、すべての翻訳(投稿・ページ・カテゴリー・タグ・メディア)のエンティティIDを提供します。入力 includeSelf で、クエリ対象エンティティのIDを結果に含めるかどうかを指定でき(デフォルトは false)、includeLanguages および excludeLanguages で結果に含める言語を絞り込むことができます。
このクエリを実行すると:
{
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 })
}
}...次のような結果が返ってきます:
{
"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、GenericCategory
これらのタイプはインターフェース PolylangMaybeTranslatable を実装しています。
GenericCustomPost は、Portfolio、Event、Product など、サイトにインストールされた任意のカスタム投稿を表すタイプです。同様に、GenericTag および GenericCategory はそれぞれのタクソノミーを表します。
これらのCPTおよびタクソノミーは、Polylangの設定で翻訳可能に定義できます。フィールド polylangLanguage および polylangTranslationLanguageIDs は、Post などと同じ動作をし(上記参照)、エンティティのCPTやタクソノミーが翻訳対象に設定されていない場合も null を返します。
また、フィールド polylangIsTranslatable は、CPTまたはタクソノミーが翻訳可能に設定されているかどうかを示します。
| フィールド | 説明 |
|---|---|
polylangLanguage | 投稿またはページの言語。言語が割り当てられていない場合(例:Polylangが後からインストールされた場合)、またはエンティティが翻訳対象に設定されていない場合(Polylangの設定による)は null。 |
polylangTranslationLanguageIDs | エンティティのすべての翻訳言語のノード。言語コードをキー、エンティティIDを値とするJSONオブジェクト。言語が割り当てられていない場合(例:Polylangが後からインストールされた場合)、またはエンティティが翻訳対象に設定されていない場合(Polylangの設定による)は null。 |
polylangIsTranslatable | エンティティが翻訳可能かどうかを示します。 |
このクエリを実行すると:
{
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 })
}
}
}
}
}...次のような結果が返ってきます:
{
"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
}
]
}
]
}
}ミューテーション
GraphQLスキーマには次の操作を行うミューテーションが提供されています:
- カスタム投稿、タグ、カテゴリー、メディアアイテムの言語を設定する、
- それらの間の翻訳関連付けを定義する(つまり、カスタム投稿・タグ・カテゴリー・メディアアイテムのセットが互いの翻訳であることを示す)。
| ミューテーション | 説明 |
|---|---|
polylangSetCustomPostLanguage | カスタム投稿の言語を設定します。 |
polylangSetTaxonomyTermLanguage | タクソノミータームの言語を設定します。 |
polylangSetMediaItemLanguage | メディアアイテムの言語を設定します。 |
polylangSaveCustomPostTranslationAssociation | カスタム投稿の翻訳関連付けを設定します。 |
polylangSaveTaxonomyTermTranslationAssociation | タクソノミータームの翻訳関連付けを設定します。 |
polylangSaveMediaItemTranslationAssociation | メディアアイテムの翻訳関連付けを設定します。 |
たとえば、次のクエリは3つの投稿の言語(英語・スペイン語・フランス語)を設定し、それらが互いの翻訳であることを定義します:
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
}
}
}
}言語によるデータフィルタリング
以下のデータを取得する際に、フィルタリングする言語を指定できます:
- 投稿(Posts)
- ページ(Pages)
- カスタム投稿(Custom posts)
- カテゴリー(Categories)
- タグ(Tags)
- メディアアイテム(Media items)
対応するフィールドは入力 polylangLanguageBy を受け取り、コードまたはロケールで、1つまたは複数の言語でフィルタリングできます。
たとえば、$languageCodes: ["es"] を渡すとスペイン語のデータを取得します:
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
}
}