Custom codeブロックは、独自のHTMLまたはReactをカートに追加します。ドロワーの任意のセクションに配置するか、Cart items内にサブブロックとしてネストして、各ラインごとに繰り返し表示させることができます。他のブロックとは異なり、Content設定もDesignセクションもありません。ブロック自体がコード_そのもの_なので、作業はすべてCodeタブで行います。

カスタムコードブロックを追加して有効にする
- Custom codeブロックを任意のセクションに、またはCart itemsの下のサブブロックとして追加します。
- ブロックを選択してCodeタブを開きます。
- HTMLまたはReact componentを選択します。新しいブロックのデフォルトはHTMLです。
- コードを書きます。
- Reactを選択した場合は、Compileをクリックします。
- **「Use custom template」**をオンにします。このブロックでは、このスイッチは「カスタムコードを表示する」を意味し、デフォルトはオフなので、有効にするまで何もレンダリングされません。
- ブロックが購入者に表示され続けるよう、サイドバーの目のトグルをオンのままにしてください。
動作
- カートの読み込みが完了するまで、このブロックは何もレンダリングしません。
- また、サイドバーの目のアイコンがオフの場合、**「Use custom template」**がオフの場合、コードが空の場合、またはReactのコンパイルやレンダリングが失敗した場合も何もレンダリングされません。失敗は静かに起こるため、公開前にプレビューでブロックを確認してください。
HTMLモード
- インラインの
<script>タグは実行されず、HTMLモードはSDKやwindowにアクセスできません。 - ロジックが必要な場合は、Reactモード、またはCart SDKと組み合わせたカスタムスクリプトを使用してください。
トークン
%付きのパーセンテージ、または数量)です。
例
Reactモード
add-to-cartアクションを渡します。
- エディターはラッパーを
function CustomCode(props: CustomCodeProps) { … }に固定しており、それらの行の間の本体のみを編集します。 - ブロックが表示される前に、Compileをクリックしてから、**「Use custom template」**をオンにする必要があります。
- コンポーネントでは
useState、useEffect、useMemo、useRef、useCallbackを使用できます。 - HTMLモードと異なり、Reactはページコンテキストで実行されるため、利用可能であれば
windowやCart SDKを呼び出せます。 - コンポーネントが実行時にエラーをスローした場合、ブロックは何もレンダリングせず、カートの他の部分は動作し続けます。
Props
$12.50は1250であり、12.50ではありません。HTMLトークンのようなフォーマット済み金額文字列ではありません。
カートとラインの構造
cartとlineは、SDKが他のあらゆる場所で公開しているのと同じオブジェクトです。そのため、**カートオブジェクトリファレンス**にまとめてドキュメント化されています。カート、ライン、バンドルのすべてのフィールドが記載されています。
最もよく使うのは、cart.items、cart.itemCount、cart.totalPrice、line.title、line.quantity、line.finalLinePriceです。
このブロックに固有の3つのポイント:
lineはCart itemsのサブブロックでのみ設定され、コンポーネントはラインごとに1回レンダリングされます。セクションとして配置した場合、lineはnullになるため、代わりにcart.itemsを読み取ります。- バンドルの子は
cart.itemsに含まれません。 ラインがバンドルにグループ化されている場合、アンカーラインのみが表示され、子はline.bundle.childrenに含まれます。 - ライントランスフォームによって非表示にされたラインも含まれませんが、それらは引き続き
cart.totalPriceにカウントされます。
例
props.lineを使って商品ごとのコンテンツを表示します。ブロックはラインごとに1回レンダリングされ、そのラインの商品とバリエーションがタグ付けされます。
エンリッチメントメタデータの読み取り
cart.itemsの各アイテムにはmetadataフィールドがあります。カートエンリッチャーがデータを設定するまでは空のオブジェクト{}です。設定されると、エンリッチャーのidをキーとして、そのラインの商品またはバリエーションのStorefrontデータが含まれます。
metadataは常に存在し、エンリッチャーの非同期フェッチが完了するまでは空のオブジェクト{}がデフォルトです(「まだエンリッチされていない」かどうかのテストはObject.keys(item.metadata).length === 0です)。特定のエンリッチャーのキーを読み取る際は、エンリッチメントが完了するまでそのキーが存在しないため、オプショナルチェーン(item.metadata?.enricherId)を使用してください。
ディスカウントコードとラインディスカウントの読み取り
cart.discountCodesにはカートに適用されているディスカウントコードが一覧され、各ラインのdiscountAllocationsにはそのラインに適用されているディスカウントが一覧されます。
配置と制限
- 領域: 任意(上部、本体、下部)。Cart itemsのサブブロックとしても利用可能です。
- 最大数: 無制限。
- 状態: 商品が入ったカートと空のカート(セクションブロックとして)。Cart itemsのサブブロックとしては、カートにラインがある場合のみ、ラインごとに1インスタンスがレンダリングされます。
- ロックされていないため、削除や非表示が可能です。
- ブロック単位のDesignセクションはありません。独自のマークアップ、カスタムCSS、およびグローバルのデザイン設定でスタイルを設定してください。