注文通知メールで商品タイトルとバリエーション名を箇条書きにしたい

Topic summary

Shopifyの注文通知メールで、商品ごとに見出しを出し、その下にバリエーション名と数量を箇条書きで並べたいという要望。

現状テンプレートは order.lineItems を内側でもう一度ループしており、二重ループのため同一商品名の見出しがバリエーション数だけ重複表示されるのが問題。

解決策として、ループを1回にし、前回のタイトルを保持する previous_product_title 変数で比較。タイトルが変わった時だけ「●商品名」を出力し、各行で variant.title と quantity を出力する構成が提示された。

提示コードは深いテスト未実施の注意付きで、実装時の挙動確認を推奨。

提案どおりに修正したところ希望どおりの表示になったと報告。問題は解決し、議論は収束。

Summarized with AI on January 12. AI used: gpt-5.

各商品にバリエーションを設定しており、注文が入ったときにスタッフに注文内容の通知メールを配信しています。

・ShopifyFlowにて設定

・ShopifyのプランはBasicです

理想としては通知メールの本文(テキストカラーは関係ないです)を


■注文番号:*******

■購入した商品

●商品名A

・バリエーションa-2 / バリエーションb-1 × 〇個

・バリエーションa-3 / バリエーションb-4 × 〇個

●商品名B

・バリエーションa-1 / バリエーションb-2 × 〇個

●商品名C

・バリエーションa-1 / バリエーションb-1 × 〇個

・バリエーションa-2 / バリエーションb-1 × 〇個


のように表示させたいです。

現状以下のように設定しているのですが、

■注文番号:{{order.name}}
---------------------
{% for lineItems_item in order.lineItems %}
●  {{lineItems_item.title}}
{% for lineItems_item in order.lineItems %}
  ・{{ lineItems_item.variant.title }}  ×  {{lineItems_item.quantity}}  
{% endfor %}
{% endfor %}
---------------------

結果は、


■注文番号:*******

■購入した商品

●商品名A

・バリエーションa-2 / バリエーションb-1 × 〇個

・バリエーションa-3 / バリエーションb-4 × 〇個

●商品名A

・バリエーションa-2 / バリエーションb-1 × 〇個

・バリエーションa-3 / バリエーションb-4 × 〇個

●商品名B

・バリエーションa-1 / バリエーションb-2 × 〇個

●商品名C

・バリエーションa-1 / バリエーションb-1 × 〇個

・バリエーションa-2 / バリエーションb-1 × 〇個

●商品名C

・バリエーションa-1 / バリエーションb-1 × 〇個

・バリエーションa-2 / バリエーションb-1 × 〇個


のように、購入したバリエーションの数を繰り返されてしまいます…。

(バリエーションが2パターンある商品Aと商品Cが2回入ってしまっている…)

素人の質問で申し訳ないのですが、理想通りに表示させる方法はないでしょうか?

教えていただけると嬉しいです。

よろしくお願いいたします。

@n_ogawa3

記載いただいているコードを拝見したところ、

{% for lineItems_item in order.lineItems %}

のループの中でもう一回、

{% for lineItems_item in order.lineItems %}

が入っているため、二重にループしているのではとお見受けできます。

下記のようにコードを変更いただければ、ご希望の処理になるのではと思われます。

※深くコードのテストはしておりませんので、使用の際はご確認の上ご利用ください。

■注文番号:{{order.name}}
---------------------
■購入した商品
{% assign previous_product_title = '' %}
{% for lineItems_item in order.lineItems %}
  {% if lineItems_item.title != previous_product_title %}
    {% assign previous_product_title = lineItems_item.title %}
    ● {{ lineItems_item.title }}
  {% endif %}
  ・{{ lineItems_item.variant.title }} × {{ lineItems_item.quantity }}
{% endfor %}
---------------------

ご参考まで。

(キュー小坂)

1 Like

丁寧に教えていただきありがとうございます!

早速試したところ、希望通りになりました!

ありがとうございました!