上級
上級ヘルパークエリの作成

ヘルパークエリの作成

翻訳作業を行っていると、サイト全体で特定のコンテンツを特定・分析・処理する必要が生じるさまざまな状況に遭遇することがあります。例えば:

  • 翻訳できない特定のGutenbergブロックを含む投稿を見つける
  • 破損または不正なデータを含む投稿を特定する
  • 手動レビューや移行が必要なコンテンツを見つける
  • バッチ操作のための投稿、ページ、その他のコンテンツタイプのリストを取得する

Gato AI Translations for Polylang は内部で Gato GraphQL を実行しているため、このツールを活用してカスタムGraphQLクエリを作成し、WordPressサイトの情報を検索・フィルタリング・取得することができます。

高度なモードの有効化

GraphQLクエリを実行するには、まずプラグインの設定で高度なモードを有効にする必要があります。

設定 > プラグイン設定 > 高度な使用 に移動し、高度なモードを有効にする を選択します:

高度なモードの有効化
高度なモードの有効化

有効にすると、Queries カスタム投稿タイプがWordPress管理メニューで利用できるようになります:

Queries CPTが有効化された状態
Queries CPTが有効化された状態

WordPress管理メニューの Queries に移動し、新しいエントリーを追加します。クエリの内容を明確に示すわかりやすいタイトルを付けてください。

使用例

特定のブロックを含む投稿を見つける

よくある使用例として、翻訳できない特定のGutenbergブロックを含む投稿を特定することが挙げられます。このクエリは、翻訳可能な別のブロックへ移行が必要なすべての投稿を見つけるのに役立ちます。

Find posts containing a certain block というタイトルで新しいエントリーを作成し、次のクエリを使用します:

query FindPostsContainingBlock(
  $blockName: String!
) {
  customPostCount(
    filter: {
      status: any,
      search: $blockName
    }
  )
  customPosts(
    filter: {
      status: any,
      search: $blockName
    },
    pagination: { limit: -1 }
  ) {
    id
    title
    customPostType
    url
    wpAdminEditURL
  }
}

クエリに変数を渡すことができるため、異なるブロックに対して再利用することができます。

例えば、Yoast FAQブロックを含む投稿を見つけるには、GraphQL変数を次のように設定します:

{
  "blockName": "yoast/faq-block"
}

そのクエリを実行します:

GraphQLクエリの実行
GraphQLクエリの実行

レスポンスからYoast FAQブロックを含む投稿の一覧を確認できます。任意の url をクリックするとフロントエンドで投稿が開き、任意の wpAdminEditURL リンクをクリックするとWordPressエディターで投稿が開きます。

{
  "data": {
    "customPostCount": 6,
    "customPosts": [
      {
        "id": 38602,
        "title": "BTS B",
        "customPostType": "page",
        "url": "https://www.mysite.com/bts-dietetique-b/",
        "wpAdminEditURL": "https://www.mysite.com/wp-admin/post.php?post=38602&action=edit"
      },
      {
        "id": 38024,
        "title": "Merci",
        "customPostType": "page",
        "url": "https://www.mysite.com/merci/",
        "wpAdminEditURL": "https://www.mysite.com/wp-admin/post.php?post=38024&action=edit"
      },
      {
        "id": 38633,
        "title": "BTS A",
        "customPostType": "page",
        "url": "https://www.mysite.com/bts-dietetique-a/",
        "wpAdminEditURL": "https://www.mysite.com/wp-admin/post.php?post=38633&action=edit"
      },
      {
        "id": 34871,
        "title": "Collagène marin B",
        "customPostType": "page",
        "url": "https://www.mysite.com/meilleurs-collagenes-marin/",
        "wpAdminEditURL": "https://www.mysite.com/wp-admin/post.php?post=34871&action=edit"
      },
      {
        "id": 34853,
        "title": "Collagène marin A",
        "customPostType": "page",
        "url": "https://www.mysite.com/meilleur-collagene-marin/",
        "wpAdminEditURL": "https://www.mysite.com/wp-admin/post.php?post=34853&action=edit"
      },
      {
        "id": 33987,
        "title": "Meilleur collagène en 2025 : l’avis d’un médecin (15 marques)",
        "customPostType": "page",
        "url": "https://www.mysite.com/meilleur-collagene/",
        "wpAdminEditURL": "https://www.mysite.com/wp-admin/post.php?post=33987&action=edit"
      }
    ]
  }
}

破損データエラーの修正

もう一つのよくある使用例は、破損データエラーの修正です。

例えば、メディアアイテムに存在しない親への参照がある場合、プラグインはコンテンツを翻訳できません。親への参照を削除することでこの問題を解決できます。

Remove parent reference from media item というタイトルで新しいエントリーを作成し、次のクエリを使用します:

mutation RemoveParentReferenceFromMediaItem($mediaItemID: ID!) {
  updateMediaItem( input: { id: $mediaItemID, customPostID: null } ) {
    status
    errors {
      __typename
      ...on GenericErrorPayload {
        message
      }
    }
  }
}

例えば、ID 26066 のメディアアイテムの破損データエラーを修正するには、GraphQL変数を次のように設定します:

{
  "mediaItemID": 26066
}

そのクエリを実行します。