FROM CACHE - jp_header
このコミュニティはピアツーピアサポートに移行しました。Shopify サポートは今後、このコミュニティへのサービスを提供いたしません。これからもぜひ、他のマーチャントやパートナーとつながり、サポートし合い、経験を共有してください。 当社の行動規範に違反する行動や削除を希望するコンテンツがありましたら、引き続きご報告ください

整数値のみに変換した商品ID(gid)が全商品分のproduct.idのどれとも一致しない

解決済

整数値のみに変換した商品ID(gid)が全商品分のproduct.idのどれとも一致しない

FTSSK
Shopify Partner
2 0 1

初心者質問で大変恐れ入ります。

構築中の店舗で、下記サイトを参考にバリエーションを画像リンク化したのですが

表示される商品とされない商品が混在している状態で困っています。

https://neo.astrowave.jp/blog/10092/

 

▼実際に使っている問題部分のソース▼

{% assign gids = product.metafields.custom._other_color | split: '","' %}
{% if product.metafields.custom._other_color %}
{% #### _other_colorがある複数カラーリンクの場合 #### %}
<div class="li_cv">
{% for gid in gids %}
{% assign split_id = gid | remove: '["' | remove: 'gid://shopify/Product/' | remove: '"]' | plus:0 %}
{% paginate collections.all.products by 1000 %}
{% for product in collections.all.products %}
{% if product.id == split_id %}
【要素を表示するソース(略)】

{% endif %}

{% endfor %}
{% endpaginate %}
{% endfor %}

</div>
{% else %}〜以下略

 

メタフィールド「.custom._other_color」に登録された複数の商品ID(gid)から、

不要な文字を抜いたものを全商品分のproduct.idと一致するかをチェックし

一致した場合に【要素を表示するソース(略)】部分が作成・表示される想定のものです。

商品が表示されない場合は、「<div class="li_cv">〜</div>」の中身が空の状態で出力されてしまいます。

 

◆試してみたこと:

①{% if product.id == split_id %}とその{% endif %}を削除し、

{% paginate collections.all.products by 1000 %}の数字を登録商品数より多くする

→多くの商品が表示されるものの、表示されない商品は出てこない

 

②メタフィールド「.custom._other_color」に本来登録したい商品とは別のものを追加する

→追加した商品だけが表示される

 

以上により、件名に記載したようなことが起きているのかな?と考えた次第です。

 

なお、商品数が多いためCSVで一括アップロードをしています。

入力されている値はエラーの有無に関わらず「(商品ハンドル); (商品ハンドル); …」(セミコロン区切り)で

統一されており、記入ミスはありません。

手動登録とCSV登録のどちらでもエラーが発生するため、原因が掴めない状況です。

 

もしお心当たりがあれば、原因究明と改善にお力をお貸しいただけると助かります。

1 件の受理された解決策

Qcoltd
Shopify Partner
1242 500 479

成功

@FTSSK 様

 

https://shopify.dev/docs/api/liquid/tags/paginate

こちらをご覧いただきたいのですが、

page_sizeは

The number of array items to include per page, between 1 and 50.

とあり、

1から50までしか指定できないので、

下記のように1000を指定しても、

{% paginate collections.all.products by 1000 %}

実際に取得できる商品数は、50件が上限なのではないかと思います。

 

 参考にされているページのやり方は、

ストアに登録されている全ての商品を取得できなければ成立しません。

そして、そのような方法はShopifyには標準的には用意されていないはずです。

(少なくとも私は方法を見つけられませんでしたが、もしかしたら方法があるかもしれません。)

 

カラー違いの商品ごとにコレクションを作成するのが、簡単ではないでしょうか?

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/

元の投稿で解決策を見る

2件の返信2

Qcoltd
Shopify Partner
1242 500 479

成功

@FTSSK 様

 

https://shopify.dev/docs/api/liquid/tags/paginate

こちらをご覧いただきたいのですが、

page_sizeは

The number of array items to include per page, between 1 and 50.

とあり、

1から50までしか指定できないので、

下記のように1000を指定しても、

{% paginate collections.all.products by 1000 %}

実際に取得できる商品数は、50件が上限なのではないかと思います。

 

 参考にされているページのやり方は、

ストアに登録されている全ての商品を取得できなければ成立しません。

そして、そのような方法はShopifyには標準的には用意されていないはずです。

(少なくとも私は方法を見つけられませんでしたが、もしかしたら方法があるかもしれません。)

 

カラー違いの商品ごとにコレクションを作成するのが、簡単ではないでしょうか?

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/
FTSSK
Shopify Partner
2 0 1

キュー田辺様

 

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

試してみたこと:①{% if product.id == split_id %}とその{% endif %}を削除し〜で、

「by 1000」と指定すると1000件はでてきたためMAXそこまでは読み込んでくれるようではありました。

(by 50と指定すると50件が出てくるので、上限の実態としては1000件かと思われます。)

 

おっしゃるとおり、別途絞り込み用のコレクションのハンドルを入力するメタフィールドを追加して

表示させたい商品が含まれているコレクション内から呼び出すようにしてうまくいきました!

ご助力ありがとうございます。