同時購入割引プラグイン
SimultaneousPurchase — 商品詳細ページでのセット購入促進(ポップアップ提案)およびカート・購入手続き画面での自動割引計算プラグイン
1プラグイン概要
同時購入割引プラグイン(SimultaneousPurchase)は、EC-CUBE 4.2 / 4.3 において、商品詳細ページで「カートに入れる」ボタンが押された際にモーダルポップアップを表示し、**「一緒によく購入されている関連商品」**をチェックボックス形式で提示・まとめてカートへ追加できるようにするプラグインです。
さらに、セットでカートに投入された商品に対して**「定額割引(¥OFF)」または「定率割引(%OFF)」**をカート(`/cart`)およびご注文手続き(`/shopping`)画面で自動計算して適用するため、ショップの平均注文単価(AOV)とクロスセル率を強力に引き上げます。
主な機能ハイライト
2インストール・有効化
2-1. ファイル配置
プラグインのプログラムファイルを EC-CUBE の `Plugin` ディレクトリへ配置します。
/path/to/eccube/app/Plugin/SimultaneousPurchase/ ← ここに配置2-2. コマンドでの有効化
EC-CUBE ルートディレクトリにて以下のコンソールコマンドを実行します。
cd /path/to/eccube
php bin/console eccube:plugin:install --code=SimultaneousPurchase
php bin/console eccube:plugin:enable --code=SimultaneousPurchase
php bin/console eccube:generate:proxies
php bin/console cache:clear3管理画面の設定と操作
3-1. 基本設定(プラグイン設定)
オーナーズストア ➔ プラグイン ➔ プラグイン一覧 から「SimultaneousPurchase」の「設定」ボタンをクリックします。
| 設定項目 | 選択肢 / 入力例 | 説明 |
|---|---|---|
| 機能の有効 / 無効 | 有効 / 無効 | プラグイン全体(モーダル表示・割引適用)の一括オン/オフを切り替えます。 |
| 割引タイプ | 定額割引(円) / 定率割引(%) | 同時購入された関連商品に適用する割引の種類を選択します。 |
| 割引率(%) | 例: 10 (%) | 割引タイプが「定率割引」の場合に、商品価格から減額する割合を設定します。 |
| 割引額(円) | 例: 200 (円) | 割引タイプが「定額割引」の場合に、商品価格から差し引く金額を設定します。 |
3-2. 同時購入商品の登録・編集
商品管理 ➔ 同時購入商品設定 を開きます。
- 起点商品の選択: 商品一覧または検索窓から、セット購入を提案したいメイン商品を選択します。
- 関連商品の検索・追加: インクリメンタル検索(Select2)を使用して、一緒によく買われる関連商品を複数追加します。
- 表示順の調整: 選択順がそのままフロントのポップアップ内での表示順序(`sort_no`)となります。
- 保存: 「登録」ボタンをクリックして設定を保存します。
4フロント画面の動作と購入フロー
4-1. 商品詳細ページでのポップアップ挙動
- お客様が商品詳細ページで「カートに入れる」をクリックすると、標準のフォーム送信が一時停止され、同時購入モーダルが表示されます。
- 「この商品だけ購入する」: メイン商品のみがカートに追加されます。
- 「選択した商品と一緒に購入する」: チェックされた関連商品とメイン商品がまとめてカートに追加されます。
4-2. 規格(カラー・サイズ)あり商品の安全対策
規格(ProductClass)を持つ商品が関連商品として登録されている場合、誤った規格で自動追加されるのを防止するため、チェックボックスではなく**「規格を選んで購入」リンク**(該当商品の詳細ページへ遷移)として表示されます。
4-3. ショッピングカート・ご注文手続きでの割引
- カート画面(`/cart`)およびご注文手続き画面(`/shopping`)で、セット購入対象となった関連商品の価格がリアルタイムに割引適用後の価格に更新されます。
- カートからメイン商品を削除したり、関連商品単体になった場合は、システムが自動検知して通常価格に復元します。
5PurchaseFlow連携・自動割引仕様
EC-CUBE の標準購入処理パイプライン(PurchaseFlow)にフックし、価格計算の整合性を担保しています。
5-1. 実行タイミングとプロセッサー構成
`PurchaseTogetherCartProcessor` は `ItemHolderPostValidator` として実行されます。EC-CUBE 標準の `PriceChangeValidator`(価格変動チェック)が完了した直後に割り込むことで、標準機能によって割引価格が元の価格に戻されてしまう現象を防いでいます。
| プロセッサー名 | 実行フロー | 役割・処理内容 |
|---|---|---|
PurchaseTogetherCartProcessor | @CartFlow / @ShoppingFlow | カート・注文内の明細をループし、メイン商品とセットになっている関連商品の `price02` を減額。ペアが解消された場合は元の価格に再設定。 |
6データベース構成 & ディレクトリ構造
6-1. データベーステーブル
| テーブル名 | 説明 |
|---|---|
plg_simultaneous_purchase_config | 有効/無効フラグ、割引タイプ(定額/定率)、割引率・割引額などの全体設定を保持。 |
plg_simultaneous_purchase_association | 起点商品(`product_id`)と関連商品(`related_product_id`)の手動紐付けおよび表示順(`sort_no`)を保持。 |
6-2. 主要ファイル構造
SimultaneousPurchase/
├── Entity/
│ ├── Config.php
│ └── ProductAssociation.php
├── Repository/
│ ├── ConfigRepository.php
│ └── ProductAssociationRepository.php
├── Service/
│ └── PurchaseFlow/Processor/
│ └── PurchaseTogetherCartProcessor.php
├── EventSubscriber/
│ └── ProductDetailSubscriber.php
├── Controller/
│ ├── PurchaseTogetherController.php
│ └── Admin/
│ ├── ConfigController.php
│ └── ProductAssociationController.php
└── Resource/
├── config/services.yaml
└── template/
├── default/Product/purchase_together_modal.twig
└── admin/
7注意事項・制限事項
フロントのモーダル制御 JavaScript (`purchase_together.js`) は、商品詳細ページのカートフォーム ID が
#form1 である前提で動作しています。独自テーマ等で ID を変更している場合は、JavaScript ファイル内のセレクタを調整してください。管理画面の関連商品検索には EC-CUBE 標準の Select2 を使用しています。カスタマイズにより Select2 が読み込まれない環境の場合は、管理画面テンプレートへ Select2 CDN の追加が必要です。
8よくあるご質問(FAQ)
Q1. カート画面で割引が適用されません。
A. キャッシュが残っている可能性があります。`php bin/console cache:clear` を実行してください。また、プラグイン設定で「有効」になっているか、割引額・割引率が正しい数値で設定されているかご確認ください。
Q2. 規格がある商品をモーダル上で選択してそのままカートに入れられますか?
A. 誤った規格(カラー・サイズ等)での注文事故を防ぐため、規格あり商品は詳細ページへの遷移リンクとして表示する仕様となっております。
Q3. カスタマイズや独自ルールの追加依頼は可能ですか?
A. 「特定の会員ランク限定で割引率を変えたい」「購入履歴データから自動で関連商品を抽出したい」などの個別カスタマイズは、CubeLab 公式サイト よりお気軽にお問い合わせください。