【Shopioy】リッチテキストのメタフィールドの出力方法

Shopify
Shopify

ブログのリッチテキストのメタフィールド登録はできる、でも表示で壁にぶつかる

ブログ記事に、ブログとは別にリッチテキスト形式でメタフィールドを登録できるようにしましたが、Shopify管理画面上で、ひとまずノーコードでメタフィールド登録をして、さあこれをフロント画面に表示をどうするか、となって、ちょっとした壁にぶつかりました。

まずはノーコードでブログのリッチテキストのメタフィールドを管理画面で定義

設定 > カスタムデータ > ブログ記事 を選択

定義が作成ならこのような画面になるので「定義を追加する」を押す

「タイプを選択する」の中に「リッチテキスト」があるのでそれを選択。

この例では、「名前」と「ネームスペースとキー」それぞれを以下のように登録する。

名前:item_name_text

ネームスペースとキー:custom.item_name_text

そして、「保存」で登録完了。

このように、記事作成画内に「ブログ記事のメタフィールド」という入力枠が作成された。

これをどう出力するか?

Shopifyで、リッチテキストをセクションのスキーマで登録できるようにした場合は、{{ section.setting.[id名] | newline_to_br }}のような記述だけで、Shopifyが用意したHTMLコードで出力しれて、テキストエディタで登録した通りの見出しレベル、リンク、太字、斜体でHTMLコードを出力してくれた。

しかし登録メタフィールドからHTMLを出力するときは、自分でどんなHTMLタグで囲まれた文字として出力するかを逐一定義してあげないといけない。手をかけないとこんな感じです。

メタフィールドにこのうように登録してみる。

何も手をいれないときの表示結果

HTMLコードとして出力されていない。どうやらメタフィールドではリッチテキストはJSONデータとして保持されているらしいので、これを整形して出力する必要がある。

  {% if article.metafields.custom.item_name_text != blank %}
    {% assign data = article.metafields.custom.item_name_text.value %}
    <div class="article_rich_text page-width">
      {{data |  newline_to_br}}
    </div>
  {% endif %}

↓ 加工後のコード

  {% if article.metafields.custom.item_name_text != blank %}
    {% assign data = article.metafields.custom.item_name_text.value %}
    <div class="article_rich_text page-width">
      {% for child in data.children %}
        {% if child.type == "heading" %}
          <h{{ child.level }} class="title{{ child.level }}">{{ child.children[0].value }}</h{{ child.level }}>
        {% elsif child.type == "paragraph" %}
          <p>
            {% for text in child.children %}
              {% if text.bold %}
                <strong>{{ text.value }}</strong>
              {% elsif text.italic %}
                <em>{{ text.value }}</em>
              {% elsif text.url %}
                <a href="{{ text.url }}">{{ text.children[0].value }}</a>
              {% else %}
                {{ text.value }}
              {% endif %}
            {% endfor %}
          </p>
        {% elsif child.type == "list" %}
          {% if child.listType == "unordered" %}
            <ul>
              {% for item in child.children %}
                <li>{{ item.children[0].value }}</li>
              {% endfor %}
            </ul>
          {% elsif child.listType == "ordered" %}
            <ol>
              {% for item in child.children %}
                <li>{{ item.children[0].value }}</li>
              {% endfor %}
            </ol>
          {% endif %}
        {% endif %}
      {% endfor %}
    </div>
  {% endif %}

↓ 加工後のコードで出力されたリッチテキスト

きちんとHTMLコードとして出力されている。

このコードは、Shopifyのテーマ内で商品のメタフィールド(リッチテキスト形式)を解析し、HTMLとして出力するためのLiquidテンプレートコードです。以下に主な機能を解説します:

  1. メタフィールドのデータ取得:{% assign data = product.metafields.asdqwe.test.value %}で、特定の商品のメタフィールドからデータを取得しています。
  2. データの反復処理:{% for child in data.children %}で、メタフィールドの各要素(子要素)を順に処理します。
  3. 要素タイプの判別と対応するHTML生成:
    • 見出し(heading):{% if child.type == "heading" %}で判別し、適切なレベルの<h1><h6>タグを生成します。
    • 段落(paragraph):テキストの装飾(太字、イタリック、リンク)を適用しながら<p>タグ内にコンテンツを生成します。
    • リスト:順序なし(<ul>)と順序あり(<ol>)リストを適切に生成します。
  4. HTMLの構造化:生成されたコンテンツを<section><div>タグで囲み、整理された構造にします。

このコードにより、Shopifyの管理画面で入力されたリッチテキスト形式のメタフィールドを、ウェブサイト上で適切にフォーマットされたHTMLとして表示することができます。

Webサイト制作を依頼したい方へ

PRYTHM WORKS(プリズムワークス)は、東京都墨田区、東京スカイツリーのふもとにあるWebコンテンツ制作事務所です。

華々しいおしゃれなECサイトをはじめ、アンダーグラウンドな案件まで幅広くご依頼をいただき、どんな案件でも真心・丁寧・楽しくを理念に掲げて制作しております!

作りたいサービスはあるけど、まずは費用感が知りたい!という方も、まずはお問い合わせください!

mail@prytymworks.tokyo

PRYTHM WORKSが手掛ける仕事の一部をご紹介します。

制作のご依頼者様用 費用かんたんお見積もりフォーム

おそらく本記事を読まれるのは、制作の現場の、法人またはフリーの、プロデューサーの方、ディレクターの方、エンジニアの方がほとんどかと存じます。
いつもおつかれさまです!そして本記事をお読みいただきありがとうございます。
紹介した記事の内容について、またはその他制作のご依頼について、以下のフォームより簡易お見積もりができます!
試算だけならフォーム送信しなくてもできますので、ぜひ試しにいかがでしょう?

お仕事をご希望の制作者様用 お問合せフォーム

また、まずはライトなご相談から…ということであれば、こちらのコンタクトフォームからお気軽にどうぞ!ご縁を大切にしてご返信いたします!

    ShopifyでのECサイト制作を行うならPRYTHMWORKS(プリズムワークス)へ

    ShopifyでのECサイト制作を外注しようとお考えの方は、PRYTHMWORKS(プリズムワークス)にご依頼ください。高品質なWebサイト制作で、お客様のビジネス成長を支援する会社です。Shopifyを使ったECサイト制作に力を入れており、売上向上に貢献するECサイト構築を代行いたします。豊富な経験と実績にもとづき、お客様のニーズに最適なECサイトを構築しますので、費用相場や制作事例など、気になることがございましたらお気軽にお問い合わせください。移行のご相談も承っております。

    社名合同会社PRYTHMWORKS
    事業内容EC/Webサイトの構築、管理保守
    CEO吉川直人
    法人事務所所在地〒150-0001
    東京都渋谷区神宮前六丁目23番4号桑野ビル2階
    設立日2023年(令和5年)7月3日
    沿革2020年(令和2年)10月
    個人事業主PRYTHMWORKS事業開始
    2023年(令和5年)7月
    合同会社PRYTHMWORKS設立

    会社に関するご連絡は以下よりお願いいたします。

    mail@prytymworks.tokyo


    お問い合わせ用LINEはこちらからどうぞ!

    お問い合わせ用LINEはこちらからどうぞ!

    LINE

    GoogleMeetの相談予約が可能になりました!

    以下の空いている日からサクッとGoogleMeet(ビデオ通話)の予約をどうぞ!