サムネイル

Shopify Ajax API を用いてコレクションページで商品をカートに入れる方法を徹底解説

目次

はじめに

今回は、Ajax API である Cart API を使ってコレクションページで商品をカートに追加できるように実装していきたいと思います。

Cart API とは

Cart API は、カートへ商品を追加したり、カートに入っている商品の情報を表示したりするときに使用します。

Cart API には、以下のようなエンドポイントが用意されています。

  • POST /cart/add.js : 商品を追加するときに使用
  • GET /cart.js : 顧客のカート情報を JSON として、取得するときに使用
  • POST /cart/update.js : カートに追加されている商品の数量、ノート、プロパティを更新するときに使用
  • POST /cart/change.js : カートに追加されている商品一つに対して、数量とプロパティを変更するときに使用
  • POST /cart/clear.js : カート内のすべての商品の数量をゼロ(カートを空)にするときに使用

上記の中の、POST /cart/add.js を使用してコレクションページにカートに追加ボタンを作成します。


参考

https://zenn.dev/unreact/articles/ajax-api-reference-cart

実装

それでは、コードを書いていきます。

本記事では、新規テーマの Dawn に実装します。

実装の流れは以下の通りです。

  1. カートに追加ボタンの UI を作成
  2. js ファイルを作成
  3. js ファイルの読み込み
  4. 挙動の確認

1. カートに追加ボタンの UI を作成

まず、カートに追加ボタンの見た目を作成するのですが、デフォルトのコレクションページでも見てみましょう。

Dawn デフォルトのコレクションページ

Dawn デフォルトのコレクションページは以下のような感じです。

商品画像、商品名、商品価格が表示されている一般的なコレクションページですね。

ここに、カートに追加ボタンを作成します。

ボタンの作成

Dawn では、コレクションページの商品一覧を表示するセクションは、main-colleciton-product-gird.liquidになります。

カートに追加ボタン

<button
  type="button"
  class="button button--full-width button--secondary"
  onclick="buttonClick({{ product.selected_or_first_available_variant.id }})"
  {% if product.selected_or_first_available_variant.available == false %} disabled {% endif %}
>
  <span>
    {% if product.selected_or_first_available_variant.available == false %}
      売り切れ
    {% else %}
      カートに追加
    {% endif %}
  </span>
</button>

上記コードを、下記の場所に追加します。

コードを追加すると下記画像のようにカートに追加ボタンが表示されます。

ボタンを押したときにカートに商品を追加する関数を走らせるために、<button>onclick属性を追加しています。

onclickは、ボタンを押したときに走る関数を定義することができます。(※関数は後で定義します)

関数に渡す引数は、商品のバリエーション ID です。(※商品 ID とは異なるので注意が必要です)

見た目はできたので、次は**POST /cart/add.js**を使って商品をカートに追加する関数を作成します。

2. js ファイルを作成

次に、**POST /cart/add.js**を使って商品をカートに追加する関数を作成していきます。

Shopify で JavaScript ファイルを保存するディレクトリは Assets ディレクトリになります。

Assets ディレクトリに新規 JS ファイルを作成します。

add-to-cart.js

追加した JavaScript ファイルに関数を定義します。

関数の中では、Ajax API が使用されており、商品をカートに追加することができます。

function buttonClick(variantId){
  let formData = {
    items: [
      {
        id: variantId,
        quantity: 1,
      },
    ],
  };

  fetch("/cart/add", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
    },
    body: JSON.stringify(formData),
  })
  .catch((error) => {
    console.error("Error:", error)
  })
}

簡単に説明をします。

まず、関数はvariantIdを引数として受け取ります。

この引数には、追加する商品を判別するための{{ product.selected_or_first_available_variant.id }}が入ります。

formDataを定義して、fetch()bodyに渡たすことで、カートに追加されます。

JSON.stringify()は、 JavaScript のオブジェクトや値を JSON 文字列に変換するメソッドです。)

3. js ファイルの読み込み

main-collection-product-grid.liquidで作成した JS ファイルを読み込みます。

4. 挙動の確認

以上でコーディングは終了です。

実際のストアで、追加されるか確認をしてみてください。

終わりに

今回は、コレクションページで商品をカートに追加できるようにしてみました。これを使えば様々なところでカートに追加ボタンを追加することができます。ほかの Ajax API を使用すればいろいろなことが実装できます。
最後までご覧いただきありがとうございました。

おすすめ Shopify アプリ

シンプルギフトラッピング|お手軽ギフト包装アプリのアイコン

シンプルギフトラッピング|お手軽ギフト包装アプリ

シンプルな日本製のギフトラッピングアプリ。カートページに簡単にギフト包装オプションを追加できます。

シンプル購入制限|お手軽注文制限について徹底解説のアイコン

シンプル購入制限|お手軽注文制限について徹底解説

シンプルな日本製の購入数制限アプリ。商品ごとに数量の規制を行えます。

シンプルランキング表示|お手軽ベストセラーのアイコン

シンプルランキング表示|お手軽ベストセラー

購入促進!コレクションにランキングラベルを表示してストアの人気商品をアピール

シンプル顧客タグごとの限定販売|お手軽ロイヤリティのアイコン

シンプル顧客タグごとの限定販売|お手軽ロイヤリティ

日本製の顧客タグごとの購入制限アプリ。特定のタグを持つ顧客への限定販売を簡単に実現できます。

シンプルロゴ一覧|お手軽ロゴリスト表示のアイコン

シンプルロゴ一覧|お手軽ロゴリスト表示

シンプルなロゴリストアプリ。ストアにロゴリストを簡単に導入できます。

シンプル余白調整|お手軽レイアウトのアイコン

シンプル余白調整|お手軽レイアウト

シンプルな日本製の余白調整アプリ。余白を挿入することでページデザインの調整が簡単にできます。

シンプルのし(熨斗)アプリのアイコン

シンプルのし(熨斗)アプリ

シンプルな日本製のしアプリ。のし選択機能を簡単に実現できます。

シンプル画像バナー|お手軽広告バナーアプリのアイコン

シンプル画像バナー|お手軽広告バナーアプリ

シンプルな画像バナーアプリ。ストアに画像バナーを簡単に表示できます。

シンプル Q&A|どこでも FAQのアイコン

シンプル Q&A|どこでも FAQ

シンプルな Q&A アプリ。ストアに FAQ を簡単に導入できます。

シンプルモバイルアプリバナー|スマホアプリに誘導のアイコン

シンプルモバイルアプリバナー|スマホアプリに誘導

シンプルなモバイルアプリバナー。ストアにモバイルアプリバナーを簡単に導入できます。

シンプル流れる告知|流れるお知らせ挿入アプリのアイコン

シンプル流れる告知|流れるお知らせ挿入アプリ

シンプルな流れる告知アプリ。ストアに流れる告知を簡単に導入できます。

シンプル売り切れ非表示|在庫切れ商品の表示変更のアイコン

シンプル売り切れ非表示|在庫切れ商品の表示変更

売り切れ商品を非表示にすることができる日本製アプリ。売り切れになった商品を、自動的に非表示(下書き状態)にすることができます。

シンプルレビュー|お手軽口コミのアイコン

シンプルレビュー|お手軽口コミ

シンプルな日本製のレビューアプリ。レビュー機能を簡単に実現できます。

シンプル会員限定販売|お手軽アカウント必須販売のアイコン

シンプル会員限定販売|お手軽アカウント必須販売

シンプルな日本製の会員限定販売アプリ。商品毎に、ログインしていない顧客の購入制限を行えます。

シンプル会員ランク|お手軽顧客タグ付けのアイコン

シンプル会員ランク|お手軽顧客タグ付け

日本製の会員ランク管理アプリ。条件を達成した顧客に自動でタグを追加し、顧客管理を手助けします。

シンプル Wishlist|お手軽お気に入りのアイコン

シンプル Wishlist|お手軽お気に入り

商品数・お気に入り数の上限なしで使えるお手軽お気に入りアプリ。簡単にお気に入り機能を実現できます。

シンプル Coming Soon|商品ページ発売予告アプリのアイコン

シンプル Coming Soon|商品ページ発売予告アプリ

シンプルな日本製の Coming Soonアプリ。商品毎に発売予告を行えます。

シンプルセット販売|お手軽クロスセルのアイコン

シンプルセット販売|お手軽クロスセル

シンプルな日本製のセット販売アプリ。セット販売でのクロスセルを簡単に実現できます。

シンプル予約販売|受注販売や在庫切れ商品販売で使えるのアイコン

シンプル予約販売|受注販売や在庫切れ商品販売で使える

日本製の予約販売アプリ。予約販売や受注販売、在庫切れ商品販売を簡単に実現できます。

シンプル販売期間設定|商品ごとに期間限定販売のアイコン

シンプル販売期間設定|商品ごとに期間限定販売

シンプルな日本製の期間限定販売アプリ。商品ごとに販売期間を設定することができます。

シンプルVIPプログラム|お手軽VIP会員限定販売のアイコン

シンプルVIPプログラム|お手軽VIP会員限定販売

日本製の VIP 限定販売アプリ。特別な顧客を対象とした限定商品の販売を簡単に実現できます。

シンプルポイント|追加料金なしで使えるお手軽ポイントアプリのアイコン

シンプルポイント|追加料金なしで使えるお手軽ポイントアプリ

シンプルな日本製の定額ポイントアプリ。顧客はポイントをそのまま利用することができます。

おすすめ記事