顧客タグとセクション内設定による条件分岐

Topic summary

課題の概要:

Shopifyのトップページで、ログイン顧客のタグに応じてスライダー画像を条件分岐表示したい。顧客タグ(aaa、bbb、cccなど)による条件分岐は理解できているが、セクション内のブロック設定値(block.settings.member)と組み合わせた実装方法で困っている。

技術的なポイント:

  • ブロックで顧客タグを選択し、その値をblock.settings.memberで取得済み
  • {% if customer.tags contains block.settings.member %}による条件分岐が提案された
  • 質問者は当初、case文など複雑な実装を考えていたが、シンプルな条件分岐で十分と理解

現在の問題:

既存コードに適用すると全てのスライダーが表示されてしまう。else文で「aaa、bbb、ccc含む顧客すべて」という条件を満たそうとしているが、回答者からif文の仕組み上それは不可能と指摘された。

回答者の見解:

  • ブロック構造やif文の理解に誤りがある可能性
  • block.settings.memberの値がcustomer.tagsに含まれていれば自動的に該当画像が出力されるため、追加の分岐は不要なはず
  • 要件整理と質問方法の見直しを推奨

状況: 質問者は様々な方法を試したが整理できておらず、検討を続けている段階。

Summarized with AI on November 10. AI used: claude-sonnet-4-5-20250929.

ログインした顧客を識別し、トップページのスライダー表示を条件分岐させたいです。

(顧客aaaにはaaa用のスライダー画像だけ、タグされていないユーザーには登録したスライダー全て表示など)

顧客に追加したタグにより、ログインした顧客の条件分岐についてはわかりました。

({% if tag contains “aaa” or tag contains “bbb” or tag contains “ccc” %}など)
その上で、セクション内で、顧客別のスライダーを設定したいです。
そのセクションはliquid編集し、スライダー画像は1つづつブロックによって追加します。
ブロックでは、どの顧客向けなのかセレクトで選択できるようにして、その値も取得できました。
(タグされたaaa, bbb, cccとタグのついていない顧客を{{ block.settings.member }}で取得)

そこから、その取得した値によってfor loopの中身をどのように表示さればよいのか困っています。
以下のように振り分けても、スライダー画像となるブロックが同じものであると意味ないのでしょうか?
顧客タグと登録したスライダーの値を判別して、表示することが可能なのかご教示お願いいたします。

{%- case block.settings.member -%}
{%- when ‘aaa’ -%}
{%- when ‘bbb’ -%}
{%- when ‘ccc’ -%}
{%- when ‘all’ -%}
{%- endcase -%}

※テーマは有料テーマで既存のスライダーセクションを複製し、編集しています。

質問内容を把握しかねていますが、おそらく以下のように考えれば良いのではと思います。

■前提

  • block.settings.menber からタグ名が取得できる

■概要

  • ブロックに設定したタグ名が、顧客タグに含まれているか否かを判定する
{% if tag contains block.settings.menber %}
 block.settings.menberの値(=指定タグ)がtagに含まれていれば表示
{% endif %}

ブロック設定側でタグと画像を選択済みの状態だと思いますので、liquid側でcase文を書く必要はないのではと思います。

以上ですが、それほど検討したわけではなく、サンプルコードも適当に書いているので、問題ありましたら申し訳ありません。

1 Like

Jizo_Inagaki 様

ご教示ありがとうございます。

上記の条件分岐で十分でした。ややこしく考えすぎていたみたいです。

呼び出す中身についてなのですが、既存のものに当てはめるとなぜかすべて表示されてしまいます。


{%- if customer.tags contains block.settings.member -%}
    - ブロックで選択したスライダーの1つ(aaa, bbb, cccのどれか)

{%- else -%}
    - ブロックで選択したスライダーの1つ(aaa, bbb, ccc含む顧客すべて)
{%- endif -%}

既存のスライダーブロックはul li のliがブロックになっており、増減ができるようになっています。

こちらの条件分岐にliを埋め込むだけでは不十分なのでしょうか。.memberと.guestは同じものです。

コード拝見しましたが全体的な構造、ブロックやif文などに関する理解や扱い方が間違っているように思います。

■if文

記載しました block.settings.member を用いたif文は以下のいずれかでしか成立せず、else で「aaa, bbb, ccc含む顧客すべて」という条件は満たせません。

  • 指定した値を持つタグが、含まれる場合
  • 指定した値を持つタグが、含まれない場合

■block.settings.member の値に基づく動作

該当ブロックは以下の動作になるため、block.settings.member によって画像を出し分ける分岐は必要ないはずです。

  • block.settings.member に設定した値が customer.tags 内に含まれていれば、同ブロックで設定された画像が出力される

必要性があるとすると以下などかなと思いますが、そのような記載はなかったと思います。

  • 「指定タグが含まれた時に出力する画像」と「指定タグが含まれなかった時に出力する画像」の2つの画像設定がある場合
  • タグの数に応じた複数の画像設定がある場合

■構造の見直し

おそらく検討済みかと思いますが、状況によっては問題が起こる可能性があるものの以下の方法が色々簡単かなと思います。

  • セクション数に余裕があれば、スライダー用セクション自体を複数設置して表示非表示の機能を追加する

以上ですが、状況的に無料で対応する範囲を超えますので回答はここまでにさせていただきたいと思います。

この後他の方が回答される可能性を考え、失礼かと思いますが以下をお勧めします。

  • 質問時には前提/要件/要望などを箇条書きで提示できる程度に整理する
  • 「aaa, bbb, ccc含む顧客すべて」「既存のもの」「.memberと.guestは同じもの」などの情報が後から出てこないようにする
1 Like

Jizo_Inagaki 様

ご回答ありがとうございます。

block.settings.member の値の認識は合っているはずなのですが、うまくいかないですね。

上記の構造の見直しを検討したいと思います。

当方、色々な方法でためしてみるものの、整理ができていない状態です。

また、質問の仕方についてご指摘ありがとうございます。おっしゃる通りです。以後気をつけます。