見出し画像

【Shopify】今週の振り返り1

今週の振り返り


①(データ連携)Shopifyの商品ごとの割引価格をFivetranで確認する方法

詳細にはFivetran→別ツールで出力の流れですが、fivetranとの連携という意味で記載しています。

私はこの時初めてFivetranの存在を知ったくらい、知識なしです…(´Д` )

結論

Fivetranのscheme のorder > discount_allocation で取得可能 

内容(とっても長いです…)

すでにshopify→Fivetranを連携済み

order_lineの中にtotal_discontがあるんですけど、0.0というデータが返ってきていて、どうやって商品ごとの割引を確認したらいいでしょうか…とご依頼あり。

total_discountについて調べるとドキュメントに以下の記載がありました。

total_discount
The total amount of the discount allocated to the line item in the shop currency. This field must be explicitly set using draft orders, Shopify scripts, or the API. Instead of using this field, Shopify recommends using discount_allocations, which provides the same information.

https://shopify.dev/docs/api/admin-rest/2024-10/resources/order

total_discountは何かしら手を加えないと、そのままでは使用できないよ。と解釈しました。

「discount_allocations」を使えばいいのか!となりましたが、Fivetranのschemaを確認すると、order > order_line の中には、discount_allocationsはない…(ここでorderの直下にdiscount_allocationがあることに気づけず、かなり時間を費やすことに…(T . T))

では、total_discountを使用する方法を考えよう…
カスタムアプリを使用するのは時間がかかる&ストアにインストールするためにはクライアントの許可(いろいろなチェック)が必要だし、Flowでサクッとできないかなと調査開始。

しばらくShopify Flowを触っていなかったので驚きました。
いつの間にか?GraphQLを使用できるようになっていたり、Admin APIも使用できる…あとSend HTTP requestっていうのもありました。

「Run Code」で商品ごとの割引額を変数に格納することに成功!
あとはmutationで…
orderEditAddLineItemDiscount」を使用して…
いけたいけた!

あっ、orderEditAddLineItemDiscountで追加したものと、既存のクーポンがダブってる!
そうか、addだけだとそうなるよね。
orderEditRemoveLineItemDiscount」を使用して…
あれ、deprecatedになってる。

orderEditRemoveDiscount」を代わりに使うのか。

「discountApplicationId」ってどこから持ってくるんだ!?

(ここで他のタスクも進めながらで2Wほど経過…)

クライアントに「discount_allocation」を使いたいんですけど、order > order_line にないんですよね…
Flowで頑張ってみてますと報告。

数日後、discount_allocationにある値と注文の合計の割引が合わないんですよね…
なんででしょう?と相談がありました。

えっ!
discount_allocationどこから取ってきたんですか?
えぇ!!order の直下にある〜Σ(゚д゚lll)
となりました。

最初にFivetranのスキーマをしっかり確認すべきでした(ドキュメントも)

結局、複数のクーポンを使用していると、複数の商品にまたがって割引されるため、注文の中の商品全部の割引額を足すと計算合いませんか?。とお伝えして完結しました。

調査に長い時間かけてしまった申し訳なさと、schemaをしっかり確認していなかったことを反省する内容となりました。


②(テーマ)商品一覧でランキング表示

内容

ランキング形式で商品を表示したい。
ランキングの順位なども載せたい。
売上順にするか、意図した並び順にしておすすめという形にするか検討中。

という内容。

今回はデザインの指定がなかったので、既存のコレクション一覧セクションに順位を表示するカスタマイズを実施。

こちらはアプリ不要でサクッと解決です!

手順

おすすめorランキング用のコレクションを作成します。
並び順は手動やベストセラーで、意図した順番になるようにしておきます。

商品一覧(コレクション一覧)ではfor文を使用して商品を呼び出すので、forloop.indexを利用して順位を表示することにしました。

大体のテーマではセクションの中で、product-cardのようなスニペットを呼び出していると思うので、forloop.indexをスニペットを呼び出す際の情報に追加します。

例えば

Prestigeテーマ
セクション「featured-collections.liquid」
スニペット「product-card」

Dawnテーマ
セクション「featured-collection.liquid」
スニペット「card-product」

スニペットを呼び出す時に、forloop.indexの値も一緒に渡してあげる

{%- render 'product-card', product: product, reveal: should_reveal, hide_product_information: section.settings.hide_product_information, block: block, index: forloop.index -%}

index: forloop.index を付け加えることで呼び出したスニペットでindexとして順位を呼び出すことができます。

スニペット

<p>{{ index }}</p>

これで表示完了です!

ただし、このままでは、このセクションを使用すると、常に順位が出てしまうので、セクションでスキーマを追加します。

例えば、ランキング表示をするかどうかのチェック、ランキング表示のテキスト色、ランキング表示の背景色

セクション(スキーマに追加)

        {
          "type": "checkbox",
          "id": "ranking",
          "label": "ランキング表示",
          "default": false
        },
        {
          "type": "color",
          "id": "ranking_color",
          "label": "ランキング数字色",
          "default": "#ffffff"
        },
        {
          "type": "color",
          "id": "ranking_background_color",
          "label": "ランキング背景色",
          "default": "#ED8A00"
        }

スニペット

{% if block.settings.ranking %}
  <div class="collection__ranking" style="background: {{ block.settings.ranking_background_color }};">
    <p style="color: {{ block.settings.ranking_color }};">{{ index }}</p>
  </div>
{% endif %}

今回はblockにスキーマを追加しました。
スニペットの呼び出し時にblock: blockと渡しているので、スニペットの中でもblockと記載して使用できます。


③(クーポン)サブスクリプション商品のクーポンについて

コードの実装を中心に行なっていたので、クーポンについての知識が全然…

今回は、サブスクリプション商品とクーポンについて調べた内容をまとめます

*注意*
この内容は、2024年11月にShopifyサポートの方と確認した内容ですが、100%正確な内容ではない、とご理解ください。
ストアでクーポン(ディスカウント)を使用されるは自己責任でお願いいたします。
また使用しているサブスクリプションアプリによっても仕様が異なります。


初回のサブスクリプション

初回注文時、以下の併用可能
・注文割引と商品割引
・送料無料と注文割引
・複数の注文割引(5個まで)


2回目以降のサブスクリプション

①「定期的な支払いすべてにディスカウントを適応する」にチェックを入れてディスカウントを作成。初回購入時に使用→2回目以降も引き継がれる

②サブスクリプション契約後に作成した自動ディスカウントは、2回目以降の注文に適用されない(自動ディスカウントについては④も要チェック!)

③サブスクリプション契約後に作成されたクーポンであっても、「定期的な支払いすべてにディスカウントを適応する」の設定をしている、かつ商品や金額などその他の設定の条件もクリアしている場合、マイページの定期詳細画面からクーポンコードを使用(アプリ側でAPIを使用してクーポンを付与していると想定)した場合
→サブスクリプションアプリの仕様によって変わってくるが、Mikawayaアプリでは使用可能でした。

(Shopifyサポートへ質問した内容をそのまま記載↓)
④サブスクリプション契約前に自動ディスカウントで1000円以上で100円OFFというディスカウントを作成した場合、初回購入時に1200円で購入し、クーポン適応され、その後途中で商品の内容を変更し900円になった場合はクーポン対象外になると思うのですが、再度1000円以上に変更した場合、初回に使用した自動ディスカウントは適応されない認識ですがお間違えなかったでしょうか?

(返答)
自動ディスカウントであれば、基本条件を満たしていなくてもクーポンが適用されるようでございます。

→確かに、いただいた検証動画の中では、ディスカウントの条件を満たしていない場合でも、ディスカウントが適応されていました。
⇨サブスクリプション商品の初回購入時に、自動ディスカウントが使用された場合、条件を満たしていなくても2回目以降の注文でも適応される…!?

サポートさんからの追記

クーポンコードのディスカウントの場合は、対象外となった時点でクーポンが外されます。再度対象となるように変更をされても、自動で再度適用されることはありません。

→ここは理解。

⑤サブスクリプションの2回目以降は、すでに使用中のクーポンがあれば新たに追加できない。(Mikawayaアプリでのみ確認)


今回確認したのはこのような内容でした。
注意したいのは、自動クーポンはクーポン作成後に契約されるサブスクリプションにしか適応されないこと。また、自動クーポンは初回で適応された場合、2回目以降の注文時に条件を満たしていなくても適応されること、です。


クーポンはまだまだ理解できていないことが多いです…


今後もShopify関連で学んだことを、実装したことを継続して発信できるよう頑張ります!!(継続って難しい…)


Shopifyに特化したWEB制作会社で勤務しています。
Shopifyについての学びを発信中です。
記載されている内容をストアで使用する際は自己責任にてお願いいたします。

いいなと思ったら応援しよう!