カスタム商品リスト¶
目的¶
ホーム、カート、記事本文などから再利用できる商品リストを、WordPress ではなく Vendure 側で商品バリアント単位に管理する。WordPress は本文中の表示位置だけを shortcode で指定し、価格・可視性・商品カード表示は Storefront が Vendure Shop API 経由で解決する。
正本¶
- 商品リストの正本は Vendure Settings Store の
storefront.customProductLists。 - 1 リストは
handle、表示名、表示位置、社内メモ、商品バリアント ID 配列を持つ。 - 商品の並び順は Dashboard 上で並べ替えた
variantIdsの順序を正本にする。 - WordPress に商品 ID、商品番号、価格、表示可否の正本を置かない。
Dashboard 運用¶
Vendure Dashboard の カタログ > カスタム商品リスト で一覧から対象リストを選び、
詳細画面で編集する。
入力項目:
- 表示名: Storefront 上のセクション見出し。
- 呼び出し handle: Storefront / WordPress shortcode から参照する安定キー。
- 表示位置:
無選択/ホーム/カート。 - 社内メモ: 運用者向けのメモ。Storefront へは表示しない。
- 商品:
OrderedSearchSelectionで商品名・商品番号から検索し、上下移動で表示順を 制御する。
表示位置の扱い:
ホーム: Storefront ホームに表示する。カート: カート面で使うための予約値。表示面を実装する場合も同じ Shop API 契約を使う。無選択: shortcode や handle 指定でのみ呼び出す。自動表示面には出さない。- ホーム用リストが複数ある場合は、Dashboard の一覧順で複数セクションとして表示する。 重複を禁止するより、運用者が意図した順序をそのまま反映する。
Storefront 表示¶
Storefront は Shop API の
storefrontCustomProductListsByPlacement(placement: home) を使い、ホーム用リストを
一覧順に表示する。各リストの商品は保存済み variantIds を商品バリアントに解決し、
現在の顧客に見える商品だけを商品カードとして描画する。
記事・固定ページ・キャンペーン本文などの WordPress 由来 HTML では、本文内 marker を
CmsProductListContent が検出し、storefrontCustomProductListByHandle(handle:) で
対象リストを解決して商品カードへ差し込む。
非表示・存在しない商品が含まれても Storefront 側で表示可能な商品だけを出す。空になった リストはセクションごと表示しない。
WordPress shortcode¶
WordPress 本文では次の shortcode を使う。
[ritsubi_product_list handle="home-recommended"]
shortcode は Storefront 用 marker のみを出力する。
<div data-ritsubi-product-list-handle="home-recommended"></div>
handle は小文字化し、英数字・_・- 以外を - に正規化する。空の handle は何も
出力しない。
API 契約¶
Shop API:
query {
storefrontCustomProductListsByPlacement(placement: home) {
handle
title
placement
variantIds
}
}
query {
storefrontCustomProductListByHandle(handle: "home-recommended") {
handle
title
placement
variantIds
}
}
Admin API は Dashboard 保存用に同じリスト構造を読み書きする。保存には
UpdateCatalog、読み取りには ReadCatalog を要求する。
テスト¶
- WordPress unit:
apps/wordpress-cms/tests/unit/product-list-shortcode.test.js - Storefront unit:
apps/storefront/src/components/cms/cms-product-list-content.test.tsx - Dashboard CT:
apps/vendure-server/tests/dashboard-ct/ordered-search-selection.ct.spec.tsx - Admin / Shop API:
packages/plugins/src/standard-extensions/admin-extensions/admin-extensions.plugin.spec.ts