🌐 言語: 🇻🇳 Tiếng Việt · 🇬🇧 English · 🇯🇵 日本語(現在)
GP247 のセット商品(Bundle / Combo)
はじめに
このドキュメントでは、GP247(バージョン 2 以降)の セット商品(bundle/combo) 機能を説明し、ストアオーナーが複数の 子商品からなるセット商品を自分で作る方法を案内します。技術に詳しくない方 向けです。読み終えると、セット商品と通常の 商品の違い、機能の有効化、セットの作り方、そして価格の決まり方と在庫の引き当て方がわかります。
1. セット商品とは? GP247 の 3 種類の商品
GP247 では、すべての商品が 3 つの種類(kind)のどれか 1 つ に属します。
| 種類 | 意味 | 販売できる? | 価格 | 在庫 |
|---|---|---|---|---|
| 単品(Single) | 単独で販売する通常の商品 | はい | その商品自身の価格 | 自身の在庫 |
| セット / コンボ(Build) | 1 つのパッケージ として販売する商品で、中に複数の 子商品 と数量が含まれる | はい(通常の商品と同じ) | セット自身の価格(あなたが設定) | セット自身の在庫を持つ。販売すると各子商品の在庫が引き当てられる |
| グループ(Group) | 陳列用にまとめる だけで、直接は販売しない | いいえ | なし(価格ではなく文言を表示) | 管理しない |
セット商品とは「セット / コンボ(Build)」のことです。 例:「テト(旧正月)のギフトセット」= お菓子 1 箱 + 飲み物 2 本 + 紙袋 1 枚。お客様が 1 セット 買うと、システムが自動で在庫を引き当てます:お菓子 1 箱、飲み物 2 本、紙袋 1 枚。
いちばん大切なポイント:
- セットの価格は あなたがセットに設定した価格 です。GP247 は子商品の価格を自動で 合計しません。セットの価格は あなたが決めます(お客様に魅力的になるよう、単品で買うより安くするのが一般的です)。
- 1 セット売れると、セットに登録した数量に応じて 各子商品の在庫が引き当てられます。
2. セット商品の機能を有効にする
商品の種類分け(単品/セット/グループ)は、設定のスイッチで制御されます。スイッチがオフだと すべての商品が単品 になり、 セットを作る選択肢は 表示されません。
-
管理画面(admin) にログインします。
-
ショップ設定(Shop Configuration)を開きます。
-
商品の構成タイプの項目を探します(設定キーは
product_kind、ラベルは「構成タイプを使用(単品、グループ、セット)」です)。 -
この項目を オン にして保存します。
成功すると、商品の追加/編集フォームを開いたときに 商品の種類 を選ぶ部分が表示され、単品、セット(Build)、 グループ(Group)の 3 枚のカードが並びます。
後でこのスイッチをオフにすると、商品は単品として扱われ、種類の選択部分は非表示になります(以前のセットのデータは データベースに残り、選択肢が表示されないだけです)。
3. セット商品(Bundle)を作る手順
準備:子商品(例:お菓子の箱、飲み物のボトルなど)は、単品の商品として先に作っておくのがおすすめです。セットに 組み込むとき、名前/SKU で検索するためです。
-
商品(Product) → 新規追加 を開きます。
-
商品の種類 の部分で、セット(Build) のカードを選びます。
-
通常の商品と同じように基本情報を入力します:名前、SKU、価格(セット全体の販売価格)、セットの 在庫、 説明など。
-
構成 / Composition タブを開きます(このタブは種類がセットまたはグループのときだけ表示されます)。
-
検索欄に子商品の 名前またはコード(SKU) を入力し、候補一覧から選んで追加を押します。
-
追加した子商品ごとに、セットに含まれる 数量 を入力します(例:飲み物
2本)。すべての子商品について繰り返します。 -
保存 を押します。
成功すると、セット商品が商品一覧に表示されます。構成タブを開き直すと、すべての子商品と数量が表示されます。
ヒント:セットはいつでも編集できます。子商品の追加/削除や数量の変更をして、もう一度保存します。古い子商品の一覧は、 新しい一覧で上書きされます。
4. セット商品の価格と在庫
- 価格: あなたがセットに入力した価格 です(通常の商品と同じく特価も設定できます)。GP247 は子商品の価格を自動で 合計しません。セットの価格は完全にあなたが決めます。
- 販売時の在庫: お客様が N セット 買うと、システムは次のように引き当てます。
- セット の在庫から N、
- 各子商品 の在庫から
N × (セット内の子商品の数量)。 - 例:セットに飲み物が 2 本入っていて、お客様が 3 セット買った場合 → 在庫から飲み物 6 本が引き当てられます。
- 特価: セット商品にも適用できます(単品と同じです)。
- 属性/バリエーション(サイズ、色など): セット商品では 使えません。バリエーションは単品の商品専用です。
在庫についての注意:1 セット売れると子商品の在庫が減るため、子商品の在庫が十分にあるか確認してください。子商品の 1 つが 在庫切れになったら、セットの在庫も適切か見直してください。
5. セット商品はお客様にどう表示されますか?
- 商品詳細ページ(ストアフロント)では、セット商品に 「Bundle」ブロック が表示され、子商品が並びます:画像、
各子商品の 数量、子商品の名前、そして「セットは A + B + C で構成」を表す
+記号です。 - お客様は 通常の商品と同じようにカートに追加して購入 します(子商品を 1 つずつ選ぶ必要はありません)。
- 表示される価格は セットの価格 です。
グループ(Group) との違い:グループには購入ボタンがなく、所属する商品を表示してお客様がクリックで移動できるだけです。 販売できるセットではありません。
6. 技術的な詳細(開発者向け)
このセクションは 開発者 向けです。一般のユーザーは読み飛ばしてかまいません。
商品の種類の定数 — vendor/gp247/shop/src/Library/Const.php:
define('GP247_PRODUCT_SINGLE', 0);
define('GP247_PRODUCT_BUILD', 1); // bundle/combo
define('GP247_PRODUCT_GROUP', 2);
shop_product.kind 列に保存されます。
データテーブル
shop_product_build— セット→子商品の関係:build_id(親セットの id)、product_id(子商品の id)、quantity(子商品の数量、decimal(15,2))、複合主キー(build_id, product_id)。shop_product_group— グループ→メンバーの関係:group_id、product_id(複合主キー)。quantity列はありません (Build と異なります)。
モデルとリレーション(ShopProduct)
builds()→hasMany(ShopProductBuild, 'build_id', 'id')。各要素は->product(子商品)と->quantityを持ちます。groups()→hasMany(ShopProductGroup, 'group_id', 'id')。ShopProductBuild::product()/ShopProductGroup::product()→belongsTo(ShopProduct, 'product_id')。
価格と在庫(ShopProduct)
getFinalPrice()— 親商品自身の価格(または特価)を返し、子商品の価格は 合算しません。updateStock($productId, $qtyChange)— 親の在庫を引き当てます。kind == GP247_PRODUCT_BUILDの場合はbuildsを ループし、各子商品の在庫をqtyChange × build->quantityだけ引き当てます。allowSale()— Group を販売対象から除外します(kind != GP247_PRODUCT_GROUP)。
管理画面(Livewire ProductManager + トレイト HasProductComposition)
- 種類の選択部分は
gp247_config('product_kind')で制御されます。= 0のときは選択部分を隠し、kind = SINGLEに固定します。 persistComposition()—builds()->create(['product_id','quantity'])(またはgroups()->create([...]))の行を すべて削除してから作り直します。- 「composition」タブは kind が Build/Group のときだけ有効になり、「variants」タブは Single のときだけ有効になります。
ストアフロント — shop_product_detail.blade.php:Bundle ブロックは $product->builds をループし、数量のバッジには
gp247_qty_format($build->quantity) を使います。
よくある質問(Q&A)
Q1: 商品を作成するとき、「セット(Build)」の種類を選ぶ場所が見当たりません。
→ 先にショップ設定で product_kind を有効にする必要があります(セクション 2 をご覧ください)。オフの場合、すべての商品は
既定で単品になり、種類の選択部分は非表示になります。
Q2: セットの価格は子商品の価格から自動で合計されますか?
→ いいえ。セットの 価格はあなたが設定します。GP247 は自動で合計しません。セットの価格は完全にあなたが決めます。
Q3: お客様が 1 セット買うと、在庫はどう引き当てられますか?
→ セットの在庫から 1 が引かれ、各子商品 の在庫から登録した数量が引かれます(例:飲み物 2 本入りのセット → 2 本を引き当て)。
Q4: セット(Build)とグループ(Group)は何が違いますか?
→ Build は価格があり、子商品の在庫を引き当てる 販売できるセット です。Group は 陳列用にまとめる だけで、販売せず、 価格もなく、カートにも追加できません。
Q5: セット商品に属性(サイズ、色)を割り当てられますか?
→ できません。属性/バリエーションは単品の商品専用です。セットではバリエーションを使いません。
Q6: 子商品は先に作る必要がありますか?
→ 先に作っておくのがおすすめです。セットに組み込むとき、子商品を名前/SKU で検索するためです。子商品(単品)を先に作ってください。
Q7: セットに特価を設定できますか?
→ できます。セット商品は単品の商品と同じように特価を使えます。
Q8: セットを編集(子商品の追加/削除、数量の変更)できますか?
→ できます。セット商品を開き、構成タブで調整してから保存します。古い子商品の一覧は新しい一覧に置き換えられます。
Q9: 子商品の 1 つが在庫切れになっても、セットは販売できますか?
→ システムは販売時に子商品の在庫を引き当て続けます。在庫数を超えて売らないよう、各子商品の在庫とセットの在庫を実際の 在庫に合わせておくことをおすすめします。
Q10: セットを作った後で product_kind をオフにするとどうなりますか?
→ 商品は単品として扱われ、種類の選択部分は非表示になります。以前のセットのデータはデータベースに残っており、フォームに 種類の選択肢が表示されなくなるだけです。
📅 最終更新: 2026-10-22 · ✍️ 作成者 (Author): GP247