購入完了ページで未会員に会員登録へのリンクを表示したい

Topic summary

購入完了ページで非会員に会員登録リンクを表示する実装について質問が投稿されました。

試した方法:

  • 「注文状況ページ」のテキストエリアに checkout.customer.has_account を使用したスクリプトを記述
  • しかし会員登録済みの顧客にもリンクが表示されてしまう問題が発生

質問のポイント:

  1. checkout.customer.has_account が使用できないのか
  2. 購入完了ページで顧客の会員登録状態を判別する方法はあるか

提案された解決策:
フルバランスの園畑氏から {%- unless customer -%} で囲む方法が提案されました。

結果:

  • 提案されたコードでは会員・非会員どちらもリンクが表示されない
  • console.log(customer) で確認すると、非会員でも customer オブジェクトに何らかの値が設定されている
  • チェックアウトページはShopify Plusプランでないと変更できない制約があることも言及されました

現状: 問題は未解決で、他の方法を検討中です。

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

購入完了ページで、会員登録していない顧客の場合、会員登録画面へのリンクを表示したいと思っています。

「設定」→「チェックアウトとアカウント」→「注文状況ページ」の

テキストエリアに以下のスクリプトを書きました。

{%- unless checkout.customer.has_account -%}
 <script>
   Shopify.Checkout.OrderStatus.addContentBox(
'<a href="/account/register">会員登録はこちら</a>'
     )
 </script>
{%- endunless -%}

実際に動かしてみると会員登録済みの顧客でも会員登録画面へのリンクが表示されてしまいます。

console.logで checkout.customer.has_account を出力してみると、会員登録の有無に限らずfalseが設定されているようです。

checkoutオブジェクトの公式ドキュメントを拝見すると確かにcustomerというプロパティが存在しており、且つ、customerにはhas_accountというプロパティが存在しているようです。

そこで以下2点質問させて頂きます。

・checkout.customer.has_accountは使用できなくなってしまったのでしょうか。

・checkout.customer.has_accountを使用せずに、またアプリを使わずに購入完了ページで顧客の会員登録状態を知る術はありますでしょうか。

もしお分かりになる方がいらっしゃいましたら、ご教授頂けますと幸いです!

Toshi-Sさま

はじめまして、フルバランスの園畑です。
ご質問を確認いたしました。

確認してないため、解決可能かは定かではないですが、

以下のコードを囲った場合はいかがでしょうか?

{%- unless customer -%}

{%- endunless -%}

チェックアウトページは基本的にshopify plusプランで変更が可能になるため、

制約は多いかと存じます。

もし解決が難しいようでしたら、shopifyサポートに対応可能か直接質問をするのも良いかと存じます。

ご参考までに。

私たちの励みにもなりますので、 お役に立てていればBest Answerボタンを押して頂ければ嬉しいです。

分からない点があれば、またいつでもご連絡ください。

フルバランス 園畑

1 Like

フルバランス園畑さま

ご回答誠にありがとうございます。

{%- unless customer -%}

{%- endunless -%}

ご教授いただいた、上記コードで囲って試してみたのですが、

会員、非会員どちらも会員登録画面へのリンクは表示されませんでした。

なお、console.log(customer); としてcustomerの中身を確認してみたのですが、

会員、非会員問わず、CustomerFromAddressableDropというものが出力されました。

ですので非会員でもcustomerオブジェクトには何かしら設定されているようでした。

チェックアウトページはshopifyPlusでないといじれないのは認識しているのですが、

購入完了ページであれば、簡単なオブジェクトであれば使えると思っておりましたが、難しそうですね。

他の方法も検討してみたいと思います!

この度は私の質問に丁寧に回答いただきありがとうございました!