【Shopify】liquidのオブジェクトについてまとめてみた (current_tags, customer, customer_address)

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

`current_tags`、`customer`、`customer_address`のオブジェクトをまとめていきます。

[こちら](https://shopify-dev.shopifycloud.com/docs/themes/liquid/reference/objects)を参考にしました。

#current_tagsオブジェクト
currentオブジェクトの概要について[ドキュメント](https://shopify-dev.shopifycloud.com/docs/themes/liquid/reference/objects/current-tags)からの引用です。

>`current_tags`は、コレクションやブログをフィルタリングするために使われている全タグを含む配列です。

Shopifyでは、タグは商品とブログ記事に与えることができ、それぞれのページでフィルタリングが出来ます。

使用するページは、`collection.liquid`、`blog.liquid`の2ページです。

##collection.liquid 内で使用された時
collection.liquidの中では、`currenct_tags`には、コレクションをフィルタリングするる全商品タグが含まれています。

以下の例では、コレクション内の全商品の全タグを表示するリストを作成しています。

コレクションが商品タグによってフィルタリングされている場合（`currenct_tags`にタグが含まれている場合）、フィルタを解除出来るリンクが表示されます。

コレクションが商品タグでフィルタリングされていない場合（`currenct_tags`にタグが含まれていない場合）、顧客がフィルタリング出来るようにするためのリンクが表示されます。

```.liquid
<ul>
{% for tag in collection.all_tags %}
    {% if current_tags contains tag %}
        <li class="active">{{ tag | link_to_remove_tag: tag }}</li>
    {% else %}
        <li>{{ tag | link_to_add_tag: tag }}</li>
    {% endif %}
{% endfor %}
</ul>
```

##blog.liquid 内で使用した時
blog.liquidの中では、`current_tags`にブログのフィルタリングに使われている全記事タグが含まれています。

以下の例では、どの記事タグがブログのフィルタリングに使用されているかを示すパンくずが追加されています。

ブログをフィルタリングしている時、パンくずリストはタグ名を表示し、フィルタリングを解除するためのリンクを表示します。

```.liquid
{% if current_tags %}
    <h1>{{ blog.title | link_to: blog.url }} &raquo; {{ current_tags.first }}</h1>
{% else %}
    <h1>{{ blog.title }}</h1>
{% endif %}
```


#customerオブジェクト
customerオブジェクトの概要について[ドキュメント](https://shopify-dev.shopifycloud.com/docs/themes/liquid/reference/objects/customer)からの引用です。

>`customer`オブジェクトには、顧客アカウントを持つ顧客に関する情報が含まれています。

`customer`オブジェクトはグローバルオブジェクトなので、全てのレイアウトファイル、テンプレートファイル、スニペットファイルでアクセスできます。

さらに、メールテンプレートやチェックアウトの注文ページ、`Order Printer`などのアプリからもアクセス剃ることが出来ます。

しかし、`customer`オブジェクトは、**顧客がログインしてる場合**にのみ定義されます。

```.liquid
{% if customer %}
  Customer is logged in. You can access the customer
  attributes such as {{ customer.first_name }}.
{% endif %}
```

それでは、`customer`オブジェクトの属性を見ていきましょう


##customer.accepts_marketing
顧客が購入をした場合に`true`を返し、購入しなかった場合に`false`を返します。

##customer.addresses
顧客に関連付けられたアドレスの配列を返します。

利用可能な属性の一覧は、後の[customer_address](#customer_addressオブジェクト)オブジェクトを参照ください。

```.liquid
{% for address in customer.addresses %}
  {{ address.street }}
{% endfor %}
```
>126 York St, Suite 200 (Shopify Office)
123 Fake St
53 Featherston Lane

##customer.addresses_count
顧客に関連付けられたアドレスの数を返します。

##customer.default_address
顧客が複数のアカウントを持っている時に、デフォルトに設定されている`customer_address`（アドレス）を返します。

##customer.email
顧客のメールアドレスを返します。

##customer.first_name
顧客のファーストネーム（名前）を返します。


##customer.has_account
チェックアウト時に入力したメールアドレスが、顧客のアカウントに関連付けられている場合は`true`を返し、そうでない場合は`false`を返します。

顧客は、ストアにアカウントを持っていなくてもチェックアウトを完了させることが出来ます。

ストアのアカウントを持っていない場合は、メールテンプレートやチェックアウト時に、`customer.has_account`は`false`になります。

顧客がストアにアカウントを持っていて、チェックアウト時にそのアカウントに関連付けられたメールを入力した場合、`customer.has_account`は`true`となります。

顧客がアカウントにログインしているかどうかに関わらず、メールはアカウントに関連付けられた内容を送信します。

##customer.id
顧客のIDを返します。

##customer.last_name
顧客のラストネーム（名字）を返します。


##customer.last_order
テスト注文以外で、顧客が最後に注文した商品を返します。

```.liquid
Your last order was placed on: {{ customer.last_order.created_at | date: "%B %d, %Y %I:%M%p" }}
```
>Your last order was placed on: April 25, 2014 01:49PM


##customer.name
顧客のフルネームを返します。

##customer.orders
顧客が発注したすべての注文の配列を返します。

```.liquid
{% for order in customer.orders %}
{{ order.id }}
{% endfor %}
```
>\#1088
\#1089
\#1090

##customer.orders_count
顧客が発注した注文の総数を返します。

##customer.phone
顧客の電話番号を返します。

##customer.tags
顧客に関連付けられたタグをリストを返します。

```.liquid
{% for tag in customer.tags %}
{{ tag }}
{% endfor %}
```
>wholesale regular-customer VIP


##customer.tax_exempt
顧客が非課税であるかどうかを返します。

##customer.total_spent
顧客が今まで購入した総金額を返します。


#customer_addressオブジェクト
customer_addressオブジェクトの概要について[ドキュメント](https://shopify-dev.shopifycloud.com/docs/themes/liquid/reference/objects/customer-address)からの引用です。

>`customer_address`は、顧客管理の住所欄の値を返します。

英語の顧客の住所欄

![ScreenClip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665523/22355e5a-641e-6a04-ad72-29871020e68e.png)


日本語の顧客の住所欄
![ScreenClip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665523/90497b09-4d12-0b0c-fe91-672e9fbc6371.png)

それでは、`customer_address`の属性について見ていきましょう。

##customer_address.address1
住所欄のの`住所（Address）`の値を返します。

##customer_address.address2
住所欄の`建物名、部屋番号など（Apatment, suite, etc）`の値を返します。

##customer_address.city
住所欄の`市区町村（City）`の値を返します。

##customer_address.company
住所欄の`会社（Company）`の値を返します。

##customer_address.country
住所欄の`国/地域（Coutry/Region）`の値を返します。

```.liquid
{{ customer_address.country }}
```
>Japan


##customer_address.country_code
住所欄の`国/地域（Coutry/Region）`の値を、ISO 3166-2 標準フォーマットで返します。

国が日本だと`JP`になります。

```.liquid
{{ customer_address.country_code }}
```
>CA


##customer_address.first_name
住所欄の`名（First name）`の値を返します。

##customer_address.id
顧客の住所に基づいた、IDを返します。

##customer_address.last_name
住所欄の`姓（Last name）`の値を返します。

##customer_address.phone
住所欄の`電話番号（Phone）`の値を返します。

##customer_address.province
住所欄の`州（province）`の値を返します。

```.liquid
{{ customer_address.province }}
```
>Ontario


##customer_address.province_code
住所欄の州（province）に基づいた、省略値を返します。

```.liquid
{{ customer_address.province_code }}
```
>ON

##customer_address.street
住所欄の`住所（Address）`欄と`建物名、部屋番号など（Address2）`の合計値を返します。

```.liquid
{{ shipping_address.street }}
```
>150 Elgin St, Shopify Office


##customer_address.zip
住所欄の`郵便番号（Postal/Zip）`の値を返します。

`Postal`コードは、国がカナダの時、`Zip`コードは、アメリカなどで表示されます。

![ScreenClip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665523/7e5f2bc5-c26c-6bd1-5e65-74f4e8d3d579.png)

![ScreenClip.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/665523/2585747b-5748-d4b7-6762-d15490a95aa5.png)


#終わりに
今回の記事はここまでになります。

お疲れさまでした。

# 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