コレクションの全ての在庫数を合算して表示したい

Topic summary

コレクションページで、そのコレクションに属する全商品の全バリエーションの在庫数を合計して表示する方法についての質問です。

当初の問題:

  • 各商品の在庫数が個別に表示されてしまい、コレクション全体での合計値が表示できない状態でした。
  • 在庫がない場合は「Sold Out」と表示したい要望もありました。

解決方法:
Qcoltd(キュー小坂)が調整コードを提供し、以下の変更を実施:

  1. コレクション全体の合計用変数 {% assign totals = 0 %} を追加
  2. 各商品のバリエーション処理後に {% assign totals = totals | plus: total %} で値を加算
  3. 在庫数に応じた分岐処理を追加(在庫あり/Sold Out)

結果:
質問者(g_ouc)は提供されたコードで希望通りの表示が実現でき、解決したことを報告しました。

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

コレクションページにて、
コレクションに属する商品(全てのバリエーションを含む)の在庫数を合計した値を表示したいです。

{%- for product in collection.products -%}
<div id="variant-inventory">
   {% assign total = 0 %}
    {% for variant in product.variants %}
     {% capture i %}{{ total | plus:variant.inventory_quantity }}{% endcapture %}
      {% assign total = i %}
    {% endfor %}
	{%- if product.available -%}
      残り在庫 {{ total }} 個
	{%- else -%}
      Sold Out
	{%- endif -%}
</div>
{%- endfor -%}

コレクション内の各商品の在庫数を下記のように表示することができました。
残り在庫 7 個
残り在庫 1 個
残り在庫 7 個
Sold Out
残り在庫 3 個
残り在庫 1 個
残り在庫 1 個

実現したいのは、下記のように1行でまとめて表示したいです。

残り在庫 20 個

また、コレクションに1つも在庫がないときにも、下記のように1行だけ表示したいです。
Sold Out

ご存じの方がおられましたら、ご教示いただけますと幸いです。
よろしくお願いいたします。

ご質問いただいている、コレクションでの商品合計表示の件ですが、

記載いただいていたコードを調整し、在庫数の合計が表示するよう調整しました。

下記調整コード


{% assign totals = 0 %}
{%- for product in collection.products -%}
  {% assign total = 0 %}
  {% for variant in product.variants %}
    {% capture i %}{{ total | plus:variant.inventory_quantity }}{% endcapture %}
    {% assign total = i %}
  {% endfor %}
  {% assign totals = totals | plus: total %}
{%- endfor -%}
{% if totals != 0 %}
  残り在庫 {{ totals }} 個
{% else %}
  Sold Out
{% endif %}

主な変更点について

  1. 合計用の関数**{% assign totals = 0 %}**を追加
  2. **{% assign totals = totals | plus: total %}{% for variant in product.variants %}**の処理で出来た値を加算
  3. **{%- for product in collection.products -%}**の外で、残り在庫数の分岐処理を追加

ご参考まで。

(キュー小坂)

1 Like

キュー小坂様

ご回答いただき、ありがとうございます!

いただいたコードで希望通りの表示ができ、非常に助かりました。
また、変更点など参考になりました。

この度は、ありがとうございました。