microCMS

コンテンツ参照

コンテンツ参照は、別のAPIで管理しているコンテンツを紐付けることができるフィールドです。
記事に対して「著者(別API)」を紐付けたり、商品に対して「カテゴリ(別API)」を紐付けたりするなど、情報の共通化やリレーションを持たせる際に利用します。

データの入稿方法

コンテンツ参照フィールドを操作しているGIF画像
フィールドをクリックすると参照先のコンテンツ一覧がモーダルウィンドウで表示されるので、その中から紐付けたいコンテンツを選択します。

補足

  • 絞り込みコンテンツ数が多い場合は、左上の検索窓を使って目的のデータを絞り込めます。
  • 「表示項目の編集」から、一覧に表示する項目をカスタマイズして、選択しやすく調整できます。
  • 参照したいデータが未登録の場合、右上の[+ 新規作成]ボタンからその場で作成し、保存後に一覧から選択して紐付けることができます。


API、CSVを利用した入稿については以下のドキュメントをご参照ください。

POST /api/v1/{endpoint}
https://document.microcms.io/content-api/post-content#h9c184228ff
コンテンツのCSVインポート
https://document.microcms.io/manual/csv-import#h2b3036ae9c

参照元コンテンツの確認

コンテンツ詳細画面の上部に表示される「被参照n件」のリンクを強調しているキャプチャ。
特定のコンテンツが他のコンテンツから参照されている場合、コンテンツ詳細画面の右上に[被参照n件]というボタンが表示されるので、現在の被参照数を確認することができます。
このボタンをクリックすると、そのコンテンツを引用している参照元のコンテンツ一覧がモーダルウィンドウで表示されます。

制限事項/注意事項

  • 複数のコンテンツを紐づけたい場合は「複数コンテンツ参照」を使用してください。
  • 参照先となるAPIの閲覧権限がない場合、コンテンツの選択や選択状況の確認を行うことができません。
  • 選択したコンテンツが下書き中や公開終了の場合はAPIレスポンスには含まれません。APIキーに「下書きコンテンツの全取得」や「公開終了コンテンツの全取得」の権限がある場合は取得可能です。
  • 既知の不具合として、参照されていないコンテンツに「被参照◯件」が紐づいているケースがあります。こちらの詳細については、ヘルプ記事「参照されていないコンテンツに「被参照◯件」が紐づいており削除できません。どうすればいいですか?」をご参照ください。

設定項目

説明

必須項目

設定をONにすると入稿時の入力が必須となります。

説明文

入稿画面に表示する説明文です。

参照先コンテンツ

参照するAPIを選択します。新規作成時のみ選択が可能です。

一覧画面に表示する項目

コンテンツ一覧画面に表示する項目をコンテンツID、またはテキストフィールドの項目から選択できます。指定した項目が存在しない場合は、コンテンツIDが代わりに表示されます。

GET APIのレスポンス形式

詳細は以下のドキュメントをご参照ください。

GET APIのフィールドごとのレスポンス形式
https://document.microcms.io/content-api/get-api-field-responses#h0fc779b269

フロントエンドでの利用方法

コンテンツ参照フィールドはオブジェクト形式でデータが返されるため、参照先のプロパティ(フィールドID)を指定して情報を表示します。
以下はNext.jsで、記事詳細に紐付けられた著者(writer)の情報を表示する実装例です。

export default async function Page({ params }) {
  const { slug } = await params;

  // microCMS JavaScript SDK(https://github.com/microcmsio/microcms-js-sdk)を使用してデータを取得
  const data = await client.getListDetail({
    endpoint: "blog",
    contentId: slug,
  });

  return (
    <main>
      <h1>{data.title}</h1>

      {/* writer はフィールドIDです。実際のフィールドIDに置き換えてください */}
      <div>
        <Image
          src={data.writer.profileImage.url}
          alt={data.writer.profileImage.alt || ""}
          width={100}
          height={100}
        />
        <h2>{data.writer.name}</h2>
        <p>{data.writer.description}</p>
      </div>

      <div>{data.content}</div>
    </main>
  );
}