WooCommerce で陥る値引きの矛盾

「 100 円引きクーポン」なのに、なぜか値引き額が「-110 円」と表示される。
1,100 円の商品に 100 円クーポンを使ったら、支払いは 1,000 円になるはず。なのに、合計金額は 990 円になっていませんか?
この謎の 10 円のズレは日本の商習慣と WooCommerce のシステム仕様がぶつかることで起きる、避けられない矛盾です。
WooCommerce でクーポンやポイントを使ったことがある方なら、この不可解な金額表示に違和感を感じた方もいるかもしれません。この記事では、そのメカニズムと背景を整理します。
WooCommerce 割引計算の罠
下の画像は WooCommerce で100 円引きクーポンを適用したときの注文画面です。クーポン指定額は 100 円なのに、実際の割引額は 110 円になっています。
1,100 円(商品価格 1,000 円+消費税)と表示される商品で 100 円の割引なら 1,000 円じゃないの???
この現象は [ WooCommerce 設定 ] - [ 税オプション ] - [ 税抜きの価格を入力します ] を選択、つまり、商品を税抜き価格で登録する場合に発生します。
クーポン割引で起きる金額のズレ
商品価格:税込 1,100 円(税抜 1,000 円)
クーポン:100 円割引
このケースでの WooCommerce の計算手順は下記です。
- 税抜価格にクーポンを適用(1,000 円 − 100 円 = 900 円)
- 税額を再計算(900 円 × 10% = 90 円)
- 合計を算出(900 円 + 90 円 = 990 円)
※「クーポン割引:-110 円」という明細表示になる。
項目 | 税抜価格 | 消費税(10%) | 税込価格 |
---|---|---|---|
割引前 | 1,000 円 | 100 円 | 1,100 円 |
クーポン適用後 | 900 円 | 90 円 | 990 円 |
WooCommerce のクーポンの考え方
商品の税込み価格は本体価格 + 税金となりますが、クーポンが適用されると、システムは裏側でこのクーポンに対しても、税込みの割引額として「本体価格」と「税金」に分解して、それぞれを記録します。
WooCommerce の設計
これは商品やサービスの提供に対する「対価」を正しく計算し、それに伴う税金を適切に処理するという、 VAT(付加価値税)の考え方に基づいています
「対価課税」とは、商品やサービスに対する支払い(対価)に税金が掛かるという考え方です。クーポンによる値引きはこの対価そのものを減らす行為です。そのため、 WooCommerce はクーポン額を「商品の本体価格」と「それに伴う税金」に分解して処理します。
110 円(税込)の割引の場合
- 商品本体の割引:100 円
- 税金の割引:10 円
このように割引を分けて記録することで、どの商品がいくらで売れたかを正確に把握し、正しい納税額を計算できるようになっています。この「分解して記帳する」という仕組みが WooCommerce が世界中の税制に対応するために採用している本質的なアプローチです。
税込み入力の場合は「総額-クーポン設定額」と同じになり、問題は出ません。本体価格の入力方法と税金の処理の整合性がとれているためです。
- 本体の内訳:1000 ÷ 1.08 = 1,018.52 / 税 81.48
- クーポンの内訳:100 ÷ 1.08 = 92.59 / 税 7.41
- 合計を算出:925.93 + 74.07 = 1,000 円
しかし、ここで致命的な矛盾が生じます。
税込入力では、問題はありませんが、税抜き入力した場合は支払額が異なるという、システムとしてあってはならない矛盾を生み出します。
割合(パーセンテージ)クーポンは?
ここまでは、固定額値引きのクーポンのケースです。
では、同じ商品に「 10%オフ」のクーポンを適用した場合はどうでしょう?
WooCommerce は同じく税抜価格を基準に計算します。
- 税抜価格に割合を適用:1,000 × 10% = 100 円
- 税額を再計算:(1,000 − 100)× 10% = 90 円
- 合計を算出:900 + 90 = 990 円
この場合、最終的な支払額は 990 円となり、「税込価格 1,100 円から 10%オフ」という一般的な計算結果と一致します。
WooCommerce の正当性が破綻している
同じ商品に対して、「 100 円オフ」と「 10%オフ」という、意図としては同じ割引にもかかわらず、ユーザーの感覚と一致したり、しなかったりするのはおかしいことです。商品の価格入力方法によって、割引額や最終的な支払額が異なるのは、システムとしての正当性が破綻しています。
そして、割合クーポンがたまたま日本の商習慣と一致することが、この矛盾をより複雑にし、「固定額割引の欠陥」を隠蔽していると言えるでしょう。
税込み入力ならば問題はない
- これから WooCommerce を構築する
- 自社の税制処理上、税込み入力で構わない
しかし、税抜き入力が必須の場合、 WooCommerce 本体の設定だけでこの問題を解決することはできません。
WooCommerce はこの現象をどう認識している?
海外フォーラムや GitHub では断片的に議論があるようですが、 WooCommerce 側(Automattic 社)はこの挙動を「税計算方式の違いによって一部地域でのみ発生する表示の問題」、ローカライズ上の問題として捉えているように見えます。
ポイント割引の場合も同じ
この現象はクーポンに限らず、ポイント割引でも同様に発生します。 100 ポイント(1 ポイント=1 円)を使った場合でも、指定 100 円分が 110 円引きになるというズレが起きます。
まとめ
WooCommerce における「 100 円引きが 110 円引きになる」現象は税抜価格への割引適用とその後の税額再計算という仕様に起因します。このため、クーポンでもポイントでも同じ現象が発生します。
これは日本特有の商習慣で片づけられる問題ではありません。
この問題については、日本語で技術的に詳しく解説している文献やブログ記事はほぼ存在せず、「金額整合性の絶対的矛盾」として体系的に整理された日本語記事は皆無に近いのが現状です。
現状の WooCommerce では、標準設定だけでこの挙動を変更することはできません。
解消するためには、税込価格ベースでの割引計算や税計算後にまとめて割引を適用する仕組みが必要なのです。
追記
WooCommerce の税込み入力時におけるクーポン割引額の不具合を解決するプラグイン WooCommerce Coupon JP Fix を作りました。
お困りの方は導入を検討ください。