特定のクーポンコードが利用された場合、メールにメッセージを表示する

Topic summary

ユーザーが特定のクーポンコード(例:「couponxxx」)が使用された注文の確認メールに、カスタムメッセージを表示させたいと質問しました。

問題点:

  • ChatGPTが提案したコードでは discount_applications の前に order. が欠けていたため、ディスカウント情報が取得できず動作しませんでした。

解決策:
Qcoltdが修正コードを提供:

{% if order.discount_applications.size > 0 %}
  {% for discount in order.discount_applications %}
    {% if discount.title == 'PROD5' %}
    コメントが表示
    {% endif %}
  {% endfor %}
{% endif %}

追加説明:

  • {% if order.discount_applications.size > 0 %} はディスカウントが1個以上ある場合のみ処理を実行し、不要な読み込みを減らすための条件分岐です。
  • ディスカウントが1個のみの場合、この条件文は省略可能とのことです。

問題は解決し、コードは正常に動作しました。

Summarized with AI on October 27. AI used: claude-sonnet-4-5-20250929.

特定のクーポンコード、ここでは「couponxxx」と仮にしますが、これを入力された注文の場合は、お客様宛の注文確認メールに特殊メッセージを表示させたいです。

ChatGPTさんと相談して次の通りコードが出力されたのですが、テスト注文しても表示がされませんでした。

{% for discount_app in discount_applications %}
  {% if discount_app.code == 'couponxxx' %}
  ここにメッセージを記入
  {% endif %}
{% endfor %}

この書き方は有効でしょうか?

正しい書き方がありましたらご教示いただけますと幸いです。

@number_girl

記載頂いているコードですと、discount_applicationsの前に**order.**がないので、

ディスカウント情報が取得できていない様に思われます。

下記のように変更されてはいかがでしょうか。

{% if order.discount_applications.size > 0 %}
  {% for discount in order.discount_applications %}
    {% if discount.title == 'PROD5' %}
    コメントが表示
    {% endif %}
  {% endfor %}
{% endif %}

ご参考まで。

(キュー小坂)

1 Like

ご返信ありがとうございます。

いただいたコードを利用したところ、正常に動作いたしました!ありがとうございます。

ちなみに追加の質問で恐縮なのですが

{% if order.discount_applications.size > 0 %}

この部分のコードって何のために必要なのでしょうか?

@number_girl

ご質問いただきました下記コードは、ディスカウントが1個以上ある場合にifの中が動く様になっています。

ディスカウントがない場合は中の処理が行われないため、不要な読み込みを少なくするために記載しています。

ですが、注文に付くディスカウントが1個であればそこまで気にする必要はないかと思いますので、下記のコードは削除いただいて問題ございません。

{% if order.discount_applications.size > 0 %}
{% endif %}

ご参考まで。

(キュー小坂)