サムネイル

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 アプリ

シンプル追従営業日カレンダー|お手軽追従休業日設定のアイコン

シンプル追従営業日カレンダー|お手軽追従休業日設定

営業日カレンダーをストアに常に追従表示。定休日や臨時休業がお客様にひと目で伝わり、安心してお買い物いただけます。

シンプル店舗受け取り|お手軽ローカルピックアップのアイコン

シンプル店舗受け取り|お手軽ローカルピックアップ

お客様がカートページで受け取り店舗・日時を指定できます。テイクアウトや店舗受け取りにおすすめです。

シンプル注文履歴おすすめ商品|お手軽マイページアップセルのアイコン

シンプル注文履歴おすすめ商品|お手軽マイページアップセル

マイページの注文ページに、商品ごとに設定したおすすめ商品を表示。再購入を後押しします。

シンプル顧客メタフィールドCSVインポート・エクスポートのアイコン

シンプル顧客メタフィールドCSVインポート・エクスポート

顧客メタフィールドをCSVで一括管理。エクスポート・編集・インポートがかんたんに。

シンプルフォーム一体型LP|お手軽チャットボット購入のアイコン

シンプルフォーム一体型LP|お手軽チャットボット購入

チャットボット形式でお客様が迷わず注文できるLPを設置できます。コーディング不要で、テーマエディタから簡単に設定できます。

シンプル商品メタフィールドCSVインポート・エクスポートのアイコン

シンプル商品メタフィールドCSVインポート・エクスポート

商品やバリエーションのメタフィールドをCSVで一括管理。インポートもエクスポートもこのアプリひとつで完了。

シンプル新しいお客様アカウント拡張|生年月日・追加フォームのアイコン

シンプル新しいお客様アカウント拡張|生年月日・追加フォーム

誕生日や性別などの項目を、お客様アカウントのプロフィールページに追加できます。コーディング不要です。

シンプル2点目購入割引|2点目以降自動セール設定のアイコン

シンプル2点目購入割引|2点目以降自動セール設定

2点目以降の購入で自動割引。割引バッジと対象商品の表示で、まとめ買いを後押しします。

関連記事