サムネイル

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>

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

liquid ファイルに追加

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

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

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

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

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

カートに追加する関数を作成

2. js ファイルを作成

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

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

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

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 ファイルを読み込みます。

JS ファイルを読み込む

4. 挙動の確認

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

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

挙動の確認

Shopify Ajax API を用いたアプリの紹介

以下のようなアプリでは、 Shopify Ajax API を用いて実装されています。

シンプル追従カート|追従購入ボタン(Buy Button)

「シンプル追従カート|追従購入ボタン(Buy Button)」はストアにノーコードで追従カートを導入できるアプリです。。こちらからアプリをインストールできます。

詳しい使い方については、以下のご利用ガイドをご覧ください。
Shopify ストアに追従カート・追従購入ボタンを追加するアプリについて徹底解説|ご利用ガイド

シンプル追従カート|追従購入ボタン(Buy Button)

終わりに

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

こちらの記事では、Admin API の解説をしています。
Shopify Admin API とは?具体的な使用方法まで徹底解説!

おすすめ Shopify アプリ

シンプル関連商品レコメンド|よく一緒に購入されている商品のアイコン

シンプル関連商品レコメンド|よく一緒に購入されている商品

関連商品を一覧からまとめて設定。買い手はセットをワンクリックでカートに入れられます。

シンプル税込税抜併記|消費税込み・税別表示・軽減税率にも対応のアイコン

シンプル税込税抜併記|消費税込み・税別表示・軽減税率にも対応

商品価格に、税込と税抜のもう一方を並べて表示できます。軽減税率が混ざるお店でも、商品ごとに正しく計算します。

シンプル原産国表示|お手軽製造国・原産地ラベルのアイコン

シンプル原産国表示|お手軽製造国・原産地ラベル

商品ごとの原産国を、国旗つきのバッジで商品ページに表示できます。国はリストから選ぶだけなので表記ゆれもありません。

シンプル商品単価表示|お手軽単位価格表示のアイコン

シンプル商品単価表示|お手軽単位価格表示

「100gあたりいくら?」を、販売する国ごとに見慣れた単位で表示できます。商品ページ・商品カード・カートで、お客様が価格を比べやすくなります。

シンプル追従電話ボタン|お手軽お問い合わせ・電話サポートのアイコン

シンプル追従電話ボタン|お手軽お問い合わせ・電話サポート

電話・LINE・WhatsAppのボタンをストアの全ページに置けます。「買う前にちょっと聞きたい」お客様をそのまま逃しません。

シンプルメガメニュー|お手軽ヘッダー階層ナビゲーションのアイコン

シンプルメガメニュー|お手軽ヘッダー階層ナビゲーション

画像つきの複数カラムのドロップダウンナビゲーションを、コードに触れずに作成・編集できます。

シンプル商品画像透かし|お手軽ウォーターマークのアイコン

シンプル商品画像透かし|お手軽ウォーターマーク

商品画像にロゴやテキストの透かしを焼き込み、どこに転載されても出どころが分かるようにします。

シンプルマイページバナー|お手軽顧客アカウント画像のアイコン

シンプルマイページバナー|お手軽顧客アカウント画像

顧客アカウントページにバナーを表示。画像をアップロードして URL を貼るだけで表示されます。

関連記事