MEGA MENUなどに表示される、第2階層のナビ一覧に、そのページのカスタムフィールドを取得し表示する事は可能でしょうか?

解決済
Highlighted
観光客
18 0 1
{% assign menu = linklists[section.settings.main_linklist] %}

{% for link in menu.links %}

  {% if link.links != blank %}
  {% assign link-title = link.title | strip %}

	{% assign is-mega-menu = false %}
	{% if section.settings.enable_mega_menu == true %}
		{% for block in section.blocks %}
			{% assign block-title = block.settings.mega-menu | strip %}
			{% if block-title == link-title  %}
				{% assign is-mega-menu = true %}
				{% assign mega-menu-block = block %}
			{% endif %}
		{% endfor %}
	{% endif %}


	<li class="site-nav--has-dropdown {% if is-mega-menu %} mega-menu{% endif %}" aria-haspopup="true">
		<a href="{{ link.url }}" class="site-nav__link">{{ link.title }}<span class="icon icon-arrow-down" aria-hidden="true"></span>
		</a>
		<ul class="site-nav__dropdown dropdown__list">
			{% for sub_link in link.links %}
				{% if sub_link.levels > 0 %}
				<li class="dropdown__cat cat" aria-haspopup="true">
					<a href="{{ sub_link.url }}" class="cat__link">{{ sub_link.title | escape }}</a>
					<ul class="dropdown__artists">
						{% for sub_sub_link in sub_link.links %}
						<li><a href="{{ sub_sub_link.url }}" class="site-nav__link">{{ sub_sub_link.title | escape }}</a></li>
						{% endfor %}
					</ul>
				</li>
				{% else %}
				<li class="cat"><a href="{{ sub_link.url }}" class="cat__link">{{ sub_link.title | escape }}</a></li>
				{% endif %}
			{% endfor %}
		</ul>
	</li>

    {% else %}

    <li><a href="{{ link.url }}" class="site-nav__link">{{ link.title }}</a></li>

  {% endif %}

{% endfor %}

 

と言ったメガナビで、「sub_sub_link」のページに設定されているカスタムフィールドを表示したいのですが、
うまくいかず表示できずにいます。

もし宜しければお知恵をお借りできないでしょうか?
よろしくお願いいたします。

0 件の「いいね!」
Highlighted
Community Manager
Community Manager
527 118 194

こちらの記事が、同様のことをやっているので参考になりますでしょうか?

https://www.shopify.com/partners/blog/shopify-link-list

冒頭の、linklistの参照は、sectionの設定を見て判断しているようですが、これがちゃんと動作するかは不明です。(ブログでは、{% for link in linklists.main-menu.links %} となっています)。

 

Technical Partner Manager, Japan
1 件の「いいね!」
Highlighted
観光客
18 0 1

コメントありがとうございます。
お礼が遅くなってしまい申し訳ありません。

現在、サブナビのサブナビまでの表示はできている状態で、そのサブナビのサブナビの飛び先に設定してるカスタムフィールドをそのナビ無いで取得する事は出来ないかと奮闘しております。

具体的には、最終的に表示するナビは作家別コレクションになっていて(その上のナビは素材別コレクション)、各作家にアイコンをカスタムフィールドで登録しています。
そちらを表示させたいと思っております。

度々となってしまいますが、お知恵をお借りできれば幸いです。

皆様、よろしくお願いいたします。

0 件の「いいね!」
Highlighted
開拓者
88 24 91

横から失礼します。

実際に試していないのと、仕組み的にバッドノウハウの可能性が高いのですが、一応できそうかなというのが考えられたので記載したいと思います。

 

 

{% for collection in collections %}
  {% if collection.title == 'コレクション名' %}
    {% for product in collection.products %}
      {% if product.url == sub_sub_link.url %}
        {{ product.metafields.メタフィールド名 }}
    {% endfor %}
  {% endif %}
{% endfor %}

 

 

  1. 目的の商品のみでコレクションを作る
  2. forでコレクション内の商品情報を取り出す
  3. 商品のURLとsub_sub_link.urlが一致した場合にメタフィールドを取り出す

 

{% if product.url == sub_sub_link.url %} が成り立つのなら、表示可能なはずです。

成り立たない場合は、sub_sub_linkから取れる他の値を使って、product内の値と比較できればなんとかなるかもしれません。

 

ただ他にも懸念点があります。

{% for sub_link in link.links %} のループの中の {% for sub_sub_link in sub_link.links %} のループの中で、さらにコレクションのループとそのproductのループを展開するという状態になるため、パフォーマンスに問題が出る気がします。

コレクションを利用しているため、sub_sub_linkに設定する商品でコレクションを作る必要もあります。
この点はコレクションを使わずにproductsの値が取れれば解決できるのですが、方法がわかりませんでした。

 

動作しない、あるいは目的に沿っていないなどでしたら申し訳ありません。

 

1 件の「いいね!」
Highlighted
開拓者
88 24 91

成功

もう不要かもしれませんが、よりシンプルな形にできそうだったので追記します。

 

 

{{ all_products['ハンドル名'].metafields.hoge.fuga }}

 

 

collectionを使わずとも、必要なページのハンドル名を記載すれば値が取れました。

 

2 件の「いいね!」
Highlighted
観光客
18 0 1

>jizo様

お礼が遅くなり大変申し訳ありません。。。

まだ試せていないのですが、時間が取れ次第試してみます。

ありがとうございます。

0 件の「いいね!」
Highlighted
観光客
18 0 1

やっと時間を作れて、試せたのですが、表示されませんでした。

根本的な仕組みを理解しきれていないので、自分の環境に適用させるのが難しく、ダメでした。
liquidについて、しっかり勉強しないとダメですね。。。

色々とお知恵をお借りいたしまして、ありがとうございます。

0 件の「いいね!」
Highlighted
開拓者
88 24 91

表示されなかったとのこと、コードが動作せず残念です。

すでにクローズかと思いますが、ちょうど最近の案件でこちらのご希望と同種の要望を満たすコードを作る必要がありまして、ちゃんと動くものができましたので、それを元に一応記載します。

 

 

 {{ all_products[sub_sub_link.handle].metafields.hoge.fuga }}

 

 

手持ちの開発ストアで上記を試しますと値の取得を確認できているのですが、お試しになられて取得できないのであれば、私が質問内容から把握した状態と実際の状態とが違うのかもしれません。(例えば表示したいのは商品ではなくコレクションのメタフィールドの値であるなど)

 

そのたり明確になりますと具体案が出せるかもしれませんが、もはや不要でしたら無視していただければと思います。

 

■補足

当初記載いただいたコードを一部引用して組み込みますと以下のようになります。入力された内容がURLなのか画像名なのか不明のため、とりあえず値を出力させるだけのものです。

{% for sub_sub_link in sub_link.links %}
 <li>
  <a href="{{ sub_sub_link.url }}" class="site-nav__link">
    {{ sub_sub_link.title | escape }}<br>
    カスタムフィールドの値:{{ all_products[sub_sub_link.handle].metafields.hoge.fuga }}
  </a>
</li>
{% endfor %}

 

0 件の「いいね!」
Highlighted
観光客
18 0 1

コレクションで分類したものの一覧を表示し、その一つ一つの登録されているmetafieldsに登録した画像を表示使用しております。
metafieldsには、「Advanced Custom Fields」をして要していまして、NamespaceとKeyはともに「photo」と同じものにしてしまっています。。。

ご教授いただいたソースをもとに、

{% for sub_sub_link in sub_link.links %}
<li>
<a href="{{ sub_sub_link.url }}" class="site-nav__link">
{{ sub_sub_link.title | escape }}<br>
カスタムフィールドの値:{{ all_products[sub_sub_link.handle].metafields.photo.photo }}
</a>
</li>
{% endfor %}

と、入れてみたのですが、何も取得できず、情けない話どこが問題かも把握できない状態です。。。

0 件の「いいね!」
Highlighted
開拓者
88 24 91

試作いただきありがとうございます。

確認したいのですが、メタフィールドを設定したのは以下のいずれでしょうか?

  • 商品
  • 商品のバリエーション
  • コレクション
  • ストア
0 件の「いいね!」