【Shopify】liquidのオブジェクトについてまとめてみた (selling_plan, selling_plan_allocation, selling_plan_group)

# はじめに

この記事は、Liquid オブジェクトについて日本語訳したものです。

`selling_plan`, `selling_plan_allocation`, `selling_plan_group`オブジェクトをまとめていきます。

またこれらのオブジェクトはいずれも`Beta`との表示があります。



## selling_plan　オブジェクト

`selling_plan` オブジェクトは、ライン・アイテムに適用された販売計画の意図をキャプチャします。

`selling_plan`の属性についてそれぞれ見ていきます。



## selling_plan.description

`selling_plan.description`は、販売プランの説明を返します。



## selling_plan.group_id

`selling_plan.group_id`は、販売プランが属する`selling_plan_group`の一意のIDを返します。

同じアプリで作成され、同じ`selling_plan_group.name`と`selling_plan_group_option.name`の値を持つ販売プラングループは、製品オブジェクト上で同じ`selling_plan_group`に結合されます。



## selling_plan.id

`selling_plan.id`は、販売プランの一意のIDを返します。

この値は、カートに`selling_plan`を送信する際に使用されます。



```.liquid:Input
<select name="selling_plan">
  {% for variant in product.variants %}
    <optgroup label="{{ variant.title }}">
      {% for allocation in variant.selling_plan_allocations %}
        <option value="{{ allocation.selling_plan.id }}">
          {{ allocation.selling_plan.name }}
        </option>
      {% endfor %}
    </optgroup>
  {% endfor %}
</select>
```

```.liquid:Output
<select name="selling_plan">
  <optgroup label="Coffee">
    <option value="1425">1-month subscription</option>
    <option value="3642">6-month subscription</option>
    <option value="3260">1-year subscription</option>
  </optgroup>
  <optgroup label="Tea">
    <option value="1425">1-month subscription</option>
    <option value="3642">6-month subscription</option>
    <option value="3260">1-year subscription</option>
  </optgroup>
</select>
```



## selling_plan.name

`selling_plan.name`は、販売プランの名前を返します。

販売プランの名前は、チェックアウト時にラインアイテムのご注文概要に表示されます。



## selling_plan.options

`selling_plan.options`は、特定の `selling_plan_group_option` に対する販売プランの値に関する情報を含む `selling_plan_option` オブジェクトの配列を返します。



### selling_plan_option.name

`selling_plan_option.name`は、販売プラングループのオプション名です。


### selling_plan_option.position

`selling_plan_option.position`は、すべての `selling_plan_group.options` の中のオプションのインデックスです。


### selling_plan_option.value

`selling_plan_option.value`は、販売プランのオプションの値です。

この値は、`selling_plan_group_option.values` 配列の項目の1つです。

```.liquid:Input
{% for option in selling_plan.options %}
  {{ option.name }} : {{ option.value }}
{% endfor %}
```

```.liquid:Output
Delivery frequency : Every month
Payment frequency : Pay per delivery
```



## selling_plan.price_adjustments

`selling_plan.price_adjustments`は、`selling_plan_price_adjustment` オブジェクトの配列を返します。`selling_plan_price_adjustment` は、販売計画が指定された期間のバリアントの価格をどのように変更するかを説明します。

配列の最大長は2です。 販売計画が価格調整を行わない場合は、配列は空です。

販売プランの各 `selling_plan_price_adjustment` は、`selling_plan_allocation` 配列の `selling_plan_allocation_price_adjustment` に対応します。`selling_plan.price_adjustments`には販売プランの意図が記述され、 `selling_plan_allocation.price_adjustments`には結果として得られる金額が記述されています。

```.liquid:Input
Pay {{ selling_plan_allocation.price_adjustments[0].price | money }} on
the first {{ selling_plan.price_adjustments[0].order_count }} orders.
```

```.liquid:Output
Pay $100.00 on the first 3 orders.
```


### price_adjustment.order_count

`price_adjustment.order_count`は、この価格調整が適用される注文数です。

価格調整が継続的に適用されている場合、または売却プランの残りの期間に適用されている場合は、価値は`nil`です。


### price_adjustment.position

`price_adjustment.position`は、`selling_plan.price_adjustments`配列の`price_adjustment`の1ベースのインデックスです。

`position`の値は、`selling_plan_allocation.price_adjustments`配列内の結果の`selling_plan_allocation_price_adjustments`を参照するために使用することができます。


### price_adjustment.value

`price_adjustment.value`は、価格調整の値を表すフロートです。

価格調整の値の型によって、この値の解釈方法が変わります。

例えば、`price_adjustment.value`が`100.00`の場合: 

- `price_adjustment.value_type`が「パーセンテージ」の場合、価格調整は`100%`となります。
- `price_adjustment.value_type`が「fixed_amount」または「price」の場合、価格調整は`$100.00`となります。


### price_adjustment.value_type

`price_adjustment.value_type`は、価格調整の種類です。

可能な値は以下の通りです:
- `percentage`: 販売価格を一定の割合で引き下げる
- `fixed_amount`: 販売価格を1ドル単位で引き下げる
- `price`: バリアントに対して特定の販売価格を設定



## selling_plan.recurring_deliveries

`selling_plan.recurring_deliveries`は、販売プランに複数の定期的な配送が含まれている場合に`true`を返します。



## selling_plan.selected

`selling_plan.selected`は、販売計画の ID が `selling_plan` URL パラメータで特定されている場合に `true` を返します。



# selling_plan_allocation オブジェクト

`selling_plan_allocation`は、特定の販売プランがどのようにラインアイテムに影響を与えるかを表します。`selling_plan_allocation`は、バリアントを販売プランに関連付けます。

販売プランに複数の配送が含まれている場合、例えば 12 ヶ月のプリペイド契約など、価格と `compare_at_price` の値に配送数が乗算されます。



## selling_plan_allocation.compare_at_price

`selling_plan_allocation.compare_at_price`は、販売プラン割り当ての比較価格です。

この値は、販売プランが適用されていない場合の `variant` の価格に設定されます。販売プランが適用された `variant` の価格が同じ場合、この値は`nil`になります。



## selling_plan_allocation.per_delivery_price

`selling_plan_allocation.per_delivery_price`は、販売プランに含まれる各配送ごとに課金される価格です

販売プランに複数の配送が含まれている場合、配送ごとの価格は、`selling_plan_allocation.price`を配送数で割った値になります。

```.liquid:Input
{{ selling_plan_allocation.price | money }}
{% if selling_plan_allocation.per_delivery_price != selling_plan_allocation.price %}
  ({{selling_plan_allocation.per_delivery_price }} each)
{% endif %}
```

```.liquid:Output
$1,200.00 ($100.00 each)
```



## selling_plan_allocation.price

`selling_plan_allocation.price`は、販売プランが適用されたラインアイテムの価格です。



## selling_plan_allocation.price_adjustments

`selling_plan_allocation.price_adjustments`は、`selling_plan_allocation_price_adjustment` オブジェクトの配列です。

配列の最大長は`2`です。 販売プランが価格調整を作成していない場合、この配列は空です。

販売計画の各`selling_plan_allocation_price_adjustment`は、`selling_plan.price_adjustments`配列内の`selling_plan_price_adjustment`にマッピングされます。`selling_plan.price_adjustments`には販売プランの意図が記述され、`selling_plan_allocation.price_adjustments`には結果として得られる金額が記述されます。

```.liquid:Input
Pay {{ selling_plan_allocation.price_adjustments[0].price | money }} on
the first {{ selling_plan.price_adjustments[0].order_count }} orders.
```

```.liquid:Output
Pay $100.00 on the first 3 orders.
```


### price_adjustment.position

`selling_plan_allocation.price_adjustments`配列の`price_adjustments`の1ベースのインデックスです。

`position`値は、`selling_plan.price_adjustments`配列内の関連する`selling_plan_price_adjustment`を参照するために使用することができます。


### price_adjustment.price

`price_adjustment`期間中に請求される価格です。



## selling_plan_allocation.selling_plan

`selling_plan_allocation.selling_plan`は、割り振りを作った販売プランです。



## selling_plan_allocation.selling_plan_group_id

`selling_plan_allocation.selling_plan_group_id`は、アロケーションの販売プランが属する`selling_plan_group`のID。



## selling_plan_allocation.unit_price

`selling_plan_allocation.unit_price`は、販売計画に関連付けられた `variant` の単価です。

`variant` に単価がない場合、このプロパティは `nil` を返します。



# selling_plan_group オブジェクト

`selling_plan_group`オブジェクトは、商品の一部またはすべてのバリエーションで利用可能な販売プランのグループです。グループ内の販売プランはすべて同じ `selling_plan_option.name` 値を共有します。

同じアプリで作成され、同じ`selling_plan_group.name`と`selling_plan_group.options`の値を持つ販売プラングループは、Liquidの同じ`product.selling_plan_group`にマージされます。このマージにより、`selling_plan_group`の配列のLiquid値の冗長性がなくなります。

```.liquid:Input
{% for selling_plan_group in product.selling_plan_groups %}
 {{ selling_plan_group.name }} :

 {% for selling_plan in selling_plan_group.selling_plans %}
   - {{ selling_plan.name }}
 {% endfor %}
{% endfor %}
```

```.liquid:Output
Subscribe & save:
 - Weekly (save 10%)
 - Monthly (save 5%)

Prepaid subscriptions:
 - Prepaid for 1 year
```



## selling_plan_group.id

`selling_plan_group.id`は、販売プラングループの一意のIDです。



## selling_plan_group.name

`selling_plan_group.name`は、販売プラングループ名です。



## selling_plan_group.options

`selling_plan_group.options`は、`selling_plan_group_option` オブジェクトの配列です。
`selling_plan_group_option` オブジェクトには、`selling_plan_group.option` 配列内の個々の項目の名前とそれぞれの値が含まれます。

```.liquid:Input
{% for option in selling_plan_group.options %}
  <label>{{ option.name }}</label>
  <select>
    {% for value in option.values %}
    <option {% if value == option.selected_value %}selected{% endif %}>
      {{ value }}
    </option>
    {% endfor %}
  </select>
{% endfor %}

```

```.liquid:Output
<label>Delivery frequency</label>
<select>
  <option>Every week (save 10%)</option>
  <option selected>Every month (save 5%)</option>
  <option>Every 2 months (save 5%)</option>
</select>
```


### selling_plan_group_option.name

`selling_plan_group_option.name`は、販売プランオプションの名前を返します。


### selling_plan_group_option.position

`selling_plan_group_option.position`は、すべての `selling_plan_group.options` の中のオプションのインデックスを返します。


### selling_plan_group_option.selected_value

`selling_plan_group_option.selected_value`は、 selling plan allocation を選択した場合の販売計画プラングループオプションの値を返します。選択された販売計画の割り当ては、URL パラメータ `selling_plan` と id の両方に基づいています


### selling_plan_group_option.values

`selling_plan_group_option.values`は、販売プラングループオプションの値の配列です。



## selling_plan_group.selling_plan_selected

`selling_plan_group.selling_plan_selected`は、選択した販売プランが販売プラングループの一部である場合に `true` を返します。選択した販売プランは、URL パラメータ `selling_plan` に基づいています。



## selling_plan_group.selling_plans

`selling_plan_group.selling_plans`は、`selling_plan_group` に属する `selling_plan` オブジェクトの配列です。



## selling_plan_group.app_id

`selling_plan_group.app_id`は、アプリによって提供されるオプションの文字列で、そのアプリによって作成された販売プラングループを識別します。

アプリから文字列が提供されない場合、このプロパティは`nil`を返します。

例えば、アプリが `app_id` が "yourApp" の販売プラングループを作成した場合、`where` フィルタを使用して、これらの販売プラングループのみの配列を作成することができます。

```.liquid:Input
{% assign filtered_groups = product.selling_plan_groups | where: "app_id", "yourApp" %}
Total selling plan groups: {{ product.selling_plan_groups.size }}
Filtered selling plan groups: {{ filtered_groups.size }}
```

```.liquid:Output
Total selling plan groups: 3
Filtered selling plan groups: 1
```



# 終わりに

今回の記事はここまでになります。
お疲れ様でした。


# Shopify アプリのご紹介

Shopify アプリである、「商品ページ発売予告アプリ | リテリア Coming Soon」は、商品ページを買えない状態のまま、発売日時の予告をすることができるアプリです。Shopify で Coming Soon 機能を実現することができます。

https://coming-soon.reterior.jp/

https://apps.shopify.com/shopify-application-314?locale=ja&surface_detail=%E3%83%AA%E3%83%86%E3%83%AA%E3%82%A2&surface_inter_position=1&surface_intra_position=1&surface_type=search