アクセス国によって要素を分けたい

Topic summary

カート画面の配送日時指定フォームを日本以外からのアクセス時に非表示にする方法についての質問です。

提案された解決策:

  1. ログイン中の顧客情報を利用

    • 登録住所から国を判別
    • 電話番号の国コード(日本なら+81)で識別
    • 例:{% if customer.phone contains '+81' %}
  2. IPアドレスベースのジオロケーション

    • JavaScriptでIPジオロケーションサービス(例:www.geolocatio.com)を使用
    • ログイン状態に関係なく識別可能

制限事項:

  • Liquidでは国の判別は困難で、ログイン中の顧客情報に限定される
  • 非ログイン購入では使用不可
  • JavaScriptを使う場合、フォーム全体を表示してから動的に削除する必要があり、Liquidのような要素の出し分けはできない
  • 精度の信頼性については不明

現時点では完全な解決策はなく、各方法に難点があることが指摘されています。

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

カート画面において配送日時指定のフォームがあるのですが、これを日本以外からのアクセス時には非表示としたいです。

Liquidで使える国の判別方法はありますか?

言語セレクターの情報を使うと、日本にいて言語を変えている人にも表示されなくなってしまうため、アクセス元の国を検知したいです。

JSなどつかってしま

ログイン中のカスタマーしか出来ないですが、登録住所から割り出す方法が取れそうです。

あとは電話番号でしょうか。日本なら+81のように、固有の識別子が存在します。

{% if customer.phone contains '+81' %}

{% endif %}

フォーラム内から確認した限り、国籍を識別する方法はこれくらいでしょう。

https://shopify.dev/docs/api/liquid/objects/customer#customer-addresses

難点は、ログイン中のみ使える点です。
非ログインで購入する場合は使えないです。

ーー

jsならIPジオロケーションサービスを用いれば、ログイン状況無関係な識別が可能です。

ユーザーのIPアドレスから国籍を絞り込む方法です。

例えば以下リンクを踏むと、大体の地域が表示されます。

https://www.geolocation.com/ja

こちらも難点があります。

liquidと違って、要素の出し分けは出来ません。
フォームのパーツは全て表示してから、jsで動的に隠したり削除することになります。
あとは、精度がどこまで信頼できるのか不明です。