Knowledge Diary

【Shopify】メタオブジェクトのエントリーを下層ページにした際のLiquidカスタマイズ方法を紹介!

Published: Updated:

【Shopify】メタオブジェクトのエントリーを下層ページにした際のLiquidカスタマイズ方法を紹介!

こんにちは、Webデザイナーの 夢拓(MUHIRO)です。

Shopifyのメタオブジェクトは、「エントリーをウェブページとして公開する」をオンにすることでエントリーを下層ページとして公開することができます。
当サイトのWeb制作現場で使う用語集ページもこの機能を使用して作成しています!

この記事では、メタオブジェクトのエントリーをページとして実装する際のLiquidのカスタマイズ方法を紹介します。

この記事はこんな方におすすめ!

  • Shopifyのストアフロント開発をする方

この記事を通して、メタオブジェクトのエントリーを下層ページ化する際のLiquidカスタマイズ方法が学べ、Shopifyをさらに活用できるようになります。

それでは、どうぞ!

Index

CloseOpen

メタオブジェクトとは?

2023年1月にアーリーアクセスされたShopifyの機能です。
メタオブジェクトは、カスタムデータを構造化して保存・管理するための機能です。
製品、コレクション、顧客など、様々なリソースに関連付けて追加情報を保存できます。メタオブジェクトは、フィールドと呼ばれる複数の属性で構成され、テキスト、画像、日付など様々なデータ型をサポートしています。

管理画面から簡単に作成・編集でき、オンラインストアのテーマやAPIを通じてアクセスできます。
これにより、製品仕様、サイズ表、FAQなど、構造化されたカスタムコンテンツを柔軟に作成し、ストアフロントに表示することが可能になります。

メタオブジェクトのエントリーを下層ページにした際のLiquidカスタマイス

こちらの解説ではどのファイルに記述するなどは省略しております。Liquidの記述方法のみの解説となります。

request.page_type

"request.page_type”は「metaobject」を返します。

request.page_typeとは

ShopifyのLiquidテンプレート言語で使用できるrequestオブジェクトのひとつで、現在表示されているページのタイプを返すLiquid変数です。
これにより、開発者は特定のページタイプに応じて異なるコンテンツや機能を表示させることができます。

全ページ共通コードの「layout/theme.liquid」でよく使用します。

metaobjectオブジェクトでページの情報を取得する

metaobjectオブジェクトにはエントリーの情報が格納されています。

metaobjectオブジェクトとは

ShopifyのLiquidテンプレート言語で使用できるmetaobjectオブジェクトは、Liquidテンプレート内でカスタムデータ構造にアクセスするための機能です。
このオブジェクトを使用することで、開発者は複雑な構造化データを作成し、オンラインストアで表示できます。

metaobjectは複数のフィールドを持ち、製品やコレクションなどのShopifyリソースに関連付けることができます。
Liquid内では、metaobjectの各フィールドにアクセスして値を取得し、動的にコンテンツを生成できます。

★・・・metaobject_systemプロパティで取得します。

エントリーハンドルを取得

    {{ metaobject.system.handle }} ★

エントリータイトル(ページタイトル)を取得

    {{ metaobject.title }}

エントリーページURLを取得

    {{ metaobject.system.handle }} ★

エントリーIDを取得

    {{ metaobject.system.id }} ★

メタオブジェクト定義のタイプ(ハンドル)を取得

    {{ metaobject.system.type }} ★

request.pathを使って定義ハンドルとエントリーハンドルを取得する

request.pathとは

ShopifyのLiquidテンプレート言語で使用できるrequestオブジェクトのひとつで、現在のページへのパス(URLのドメイン名以降の部分)を返します。
例えば、URLが「https://example.com/collections/all」の場合、“request.path”は「/collections/all」を返します。

“request.path”は既存のページへのURLのみを返すため、存在しないURLの場合は空の文字列を返す可能性があります。

metaobjectオブジェクトを使用せず取得する方法です。

    {%- assign metaobject_info = request.path | split: '/' -%}
    {%- assign metaobject_dl_handle = metaobject_info[2] -%} // 定義ハンドル
    {%- assign metaobject_entry_handle = metaobject_info[3] -%} // エントリーハンドル

”request.path”からページのパスを取得し、splitフィルターを使用して「/」を基準に配列に変換します。
こうすることで、配列の2番目と3番目の要素をそれぞれ定義ハンドルとエントリーハンドルとして取得できます。

request.pathを配列にする際の注意点

”metaobject_info”を出力すると「pages 定義ハンドル エントリーハンドル」のような形で出力されます。
そのため、定義ハンドルを取得使用する場合、インデックス1を指定しそうになります。

”request.path”は常に先頭にスラッシュ(/)を含むパス文字列を返します。
これをsplitフィルダーで分割すると、最初の要素(インデックス0)は空の文字列になります。
これは、先頭のスラッシュの直後から実際のパス要素が始まるためです。

この仕様はURLの絶対パス構造を反映しており、Shopifyのシステムで一貫性のあるパス処理を可能にしています。開発者はこの特性を理解し、適切にパス要素にアクセスすることが重要です。

フィールドの情報をストアフロントに表示する

metaobjectオブジェクトを使用してストアフロントに表示をします。

    {{ metaobject.フィールドのキー }}
    {{ metaobject.フィールドのキー.value }}

メタオブジェクトの出力方法についての詳しい解説

以下の記事で詳しく解説しています。

関連記事 Related articles

면책사항

  • 본 블로그는 필자의 경험을 바탕으로 한 기술 정보와 지식을 제공하지만, 그 정확성이나 보편성을 보장하지 않습니다. 정보는 작성 시점의 것이며, 기술의 발전에 따라 오래될 수 있습니다. 이러한 정보를 이용하실 때는 본인 책임하에 이용해 주시기 바랍니다. 필요에 따라 전문가의 조언을 구하시길 권장합니다.
  • 본 블로그에서 제공하는 프로그램 코드는 필자의 최선의 지식에 기반하고 있으나, 그 정확성이나 완전성을 보장하지 않습니다. 코드의 이용이나 실행으로 인해 발생한 손해나 문제에 대해서는 일절 책임을 지지 않습니다. 코드 사용은 본인 책임하에 진행해 주시기 바랍니다.
  • 본 사이트에서 사용하는 스크린샷 이미지의 저작권은 해당 사이트의 권리자에게 있습니다. 게시에 문제가 있을 경우, 번거로우시겠지만 문의 폼을 통해 연락해 주시기 바랍니다.
  • 본 사이트에서 링크를 통해 다른 사이트로 이동한 경우, 이동한 사이트에서 제공되는 정보, 서비스 등에 대해서는 일절 책임을 지지 않습니다.
  • 본 사이트에 게재된 내용으로 인해 발생한 손해 등에 대해서도 일절 책임을 지지 않으니 양해 부탁드립니다.