メインコンテンツにスキップ

FinのカートをShopifyストアフロントと同期する

Fin for Ecommerceが商品を追加・変更したときにShopifyカートを同期し、自動更新されないテーマを修正する方法。

対応者:Beth-Ann Sher

Fin for Ecommerceが商品を追加・変更すると、ストアのカートが更新されます。これはほとんどのテーマでデフォルトで動作します。カートが更新されない場合は、以下の修正方法をご覧ください。


対応テーマ

カートはDawnHorizonBrooklynFlexFlowVenueSenseCraftRefreshおよびそれらをベースにしたテーマで自動的に同期されます。FocalPrestigeWarehouseなど多くの他のテーマも対応しています。

注意:サポートはテーマ名ではなくテーマの構造に依存するため、大幅にカスタマイズされたテーマでは以下の手順が必要な場合があります。


ストアフロントのカートが更新されない場合

Finの変更がカートに反映されない、またはページをリロードしたときだけ反映される場合、テーマがIntercomで検出できない方法でカートを更新しています。これはカスタムテーマで最も一般的です。

注意:このスニペットの追加にはShopify管理画面へのアクセスとテーマコード編集の基本知識が必要です。編集に不安がある場合は、この記事を開発者に共有してください。

修正するには、以下のスニペットをテーマに追加してください。これはFinがカートを変更するたびに発行するブラウザのカスタムイベント(intercom:cartUpdated)を監視し、Shopifyからカートを再取得して、テーマがカートを再描画するために使用するイベントを発火します。

  1. Shopify管理画面で、ライブテーマのコードエディタを開きます。

  2. 通常はlayout/theme.liquidのメインレイアウトファイルを開きます。

  3. スニペットを閉じる</body>タグの直前に貼り付けて、保存します。

  4. Finに商品を追加させてテストしてください。ページをリロードせずにストアフロントのカートが即座に更新されるはずです。

document.addEventListener('intercom:cartUpdated', async () => {
  try {
    const res = await fetch(`${window.Shopify.routes.root}cart.js`, {
      headers: { Accept: 'application/json' },
      cache: 'no-store',
    });
    if (!res.ok) return;
 
    const cart = await res.json();
 
    // Replace these with whatever your theme uses to re-render the cart.
    document.dispatchEvent(
      new CustomEvent('cart:live', { detail: cart, bubbles: true })
    );
    document.dispatchEvent(
      new CustomEvent('cart:reload', { bubbles: true })
    );
    document.documentElement.dispatchEvent(
      new CustomEvent('cart:refresh', { bubbles: true })
    );
  } catch {
    // Cart fetch failed. Leave the storefront cart as it is.
  }
});

最後の3つのdispatchを、テーマがカートを再描画するために使用するものに変更してください。

スニペット追加後もカートが更新されない場合は、最後の3つのdispatchで使われているカスタムイベント名がテーマが監視しているものと一致しているか確認してください。テーマのJavaScriptファイルやドキュメントで、どのイベントがカートの再描画に使われているか確認できます。不明な場合はこの記事を開発者に共有してください。

こちらの回答で解決しましたか?