「注文を 30 ではなく 32 サイズに変えてもらえますか?」は、ファッション EC が購入後に受け取る最も多いメッセージの 1 つですが、WooCommerce にはこれに対する標準の方法がありません。
2 つの別々の壁
1 つ目の壁は、WooCommerce の注文商品には画面上のどこにも「バリエーションを変更」する操作がないことです。既存の行の数量や価格は編集でき、削除して別の商品を一から追加することもできますが、同じ商品・価格・数量のままバリエーションだけを入れ替える機能はありません。
2 つ目の、あまり目立たない壁は、WooCommerce 標準の行編集が $order->is_editable() が true を返す間しか使えないことです。標準の設定では、注文ステータスが pending、on-hold、auto-draft の場合に限られます。実際には、顧客がサイズ変更を頼んでくる頃にはほとんどの注文がすでに Processing に進んでおり、標準の編集機能は完全にロックされています。
開発したもの
注文編集画面の各可変商品の行の下に Change variant リンクを追加しました。WooCommerce の is_editable() チェックとは意図的に切り離し、管理者権限だけで制限しています。バリエーションを後から直すのは、まさに注文が先に進んでしまった状況だからです。クリックすると、その商品のサイズ・色・丈のすべての組み合わせをクリックできるボタンとして読み込み、Manual Order Creator 用に作った選択コンポーネントを再利用します。
新しいバリエーションを選ぶと、WooCommerce 自身のメソッド WC_Order_Item_Product::set_variation() を呼び出します。これは購入時に注文の行を最初に作るときに内部で使われているのと同じメソッドなので、属性のメタデータは WooCommerce の他のすべての部分が想定する形になり、注文メールや CSV エクスポートで壊れる自作の近似値にはなりません。
変更のたびに、何が変わったかを正確に記録する注文メモも書き込みます(例:Size 56 / Length 43 / Deep Blue から Size 50 / Length 43 / Deep Blue へ)。顧客が受け取った商品について異議を唱えた場合でも、明確な記録が残ります。
意図的にやらないこと
この機能が入れ替えるのはバリエーションの情報、つまりサイズ、色、丈、商品名だけです。価格、数量、在庫は自動では変更しません。これは意図的な線引きです。顧客への請求額を黙って変えたり、在庫数を自動で調整したりするのは、スタッフが明示的に判断すべきことであって、サイズ修正の副作用であってはなりません。
ポイントのまとめ
- 注文がプラットフォームの狭い意味で「編集可能」な間しか使えない機能は、たいてい見当違いのケースを解決しています。本当に必要になるのは、その期間が終わった後です。
- メタデータを直接書き換えるのではなく、プラットフォーム自身のセッターメソッドを再利用することが、カスタムの変更をそのデータを読むすべての処理と互換に保つ鍵です。
- 機能が何に触れないか(価格、在庫)を明確に線引きすることは、何をするかと同じくらい重要です。
関連記事:注文プレビュー画面を拡張する、手動注文作成ツールをどう作ったか。
ご自身の WooCommerce や WordPress の管理画面で同じような制約にお困りですか?ご相談ください。ArtinTech Solution はまさにこうしたストア向けのカスタムツールを開発しています。