WooCommerceで小数数量の購入が通らない時の原因と対処法

WooCommerceで小数数量の購入が通らない時の原因と対処法

WooCommerceで小数数量の購入が通らない時の原因と対処法

WooCommerceのチェックアウトで小数数量(1.5kgや0.8mなど)を指定すると、line_itemsパラメータが無効というエラーが表示され、注文が完了できなくなる。原因はWooCommerceのデフォルト仕様でカート内の数量が整数として扱われるため。数量単位を変えて整数にするか、小数数量対応のプラグインを導入すれば解決できる。

なぜWooCommerceで小数数量を購入できないのか

なぜWooCommerceで小数数量を購入できないのか

WooCommerceの商品数量フィールドは、標準状態では1、2、3といった整数しか受け付けない。ところが、計量販売や布地・配線材など小数単位で売りたい商品は多く、小数を入力できるよう改造したサイトも存在する。

問題が表面化するのは、チェックアウトブロックを使っている場合だ。このブロックはStore APIと呼ばれるREST APIを通じて注文データをサーバーに送る。Store APIは送られてきた注文明細(line_items)を検証する際に、数量を整数としてチェックする。ここで小数が混ざっていると「line_itemsパラメータが無効」というエラーを返す。

従来のクラシックチェックアウト(ショートコード方式)では別の仕組みで注文を送るため、同条件でもエラーが出ないことがある。つまり「カートには小数で入るのに、チェックアウトブロックだけ失敗する」という症状になりやすい。

エラー状態
カートに小数数量(例 1.5)が入る チェックアウトブロックがStore APIへ送信 line_itemsパラメータが無効
APIスキーマが数量を整数として検証し拒否
修正後
数量を整数に変換(例 1.5kg → 1500g または 15個) Store APIへ送信 検証を通過し注文完了
整数のみで送信されるためエラーが発生しない
小数数量によるエラー  整数変換後の成功フロー

このデモは、小数数量がAPI検証で拒否される流れと、単位を変換して整数にした場合の成功フローを示している。エラーの根本原因はフロント側の表示ではなく、APIが受け取る数量の形式にある。

数量単位を変えて整数だけで販売する手順

数量単位を変えて整数だけで販売する手順

もっとも手軽で確実な方法は、商品の販売単位そのものを細かくして、顧客が常に整数で数量を入力できるようにする方法だ。たとえば1.5kgの商品を売るなら、販売単位を「kg」から「100g」に変更し、顧客には15と入力してもらう。

食品・重量商品の場合

コーヒー豆や精肉、チーズなど重量で売る商品では、単位をグラムに切り替えるだけで解決できる。商品名に「100gあたり」と明記し、価格も100g単位で設定する。1.5kg買いたい顧客は数量欄に15と入力すればよい。

布地・ロープ・配線材の場合

メーター単位で切売りする商品は、センチメートル単位に変換するのが有効だ。1.5mは150cmとして、数量欄には150と入力してもらう。商品タイトルに「1cm単位で販売」と明記すれば混乱も防げる。

在庫管理とSKUの見直し

単位を変えたら在庫数とSKUも新しい単位に合わせて更新する必要がある。1kgの在庫は1000gとして記録し、SKUも単位が分かる番号に変更しておくと後の運用が楽になる。既存の注文データには影響しないので、商品単価と在庫だけを慎重に更新する。

小数数量対応のプラグインで解決する方法

小数数量対応のプラグインで解決する方法

どうしても小数数量を維持したい場合は、小数数量に対応したプラグインを導入する方法がある。WooCommerce公式のエクステンションストアには、数量の刻み幅を小数で設定できる拡張が複数配布されている。

プラグインを選ぶ際の確認ポイントは、次の3点だ。まず、チェックアウトブロック(Store API)に対応していること。フロント側の数量入力だけを変更しても、API検証で拒否されれば同じエラーが再発する。次に、在庫管理でも小数を扱えること。最後に、WooCommerceの最新バージョンで動作確認されていること。

導入後は、商品編集画面に小数ステップの設定欄が追加される。数量の刻み幅を0.1に設定し、最小数量も小数で指定する。設定を保存したら、必ずテスト注文で小数数量が通るか確認する。カートに入れる段階とチェックアウト実行の両方でエラーが出ないことを確かめる。

開発者向けカスタムコードで数量の小数を許可する方法

開発者向けカスタムコードで数量の小数を許可する方法

自作テーマやカスタムプラグインで対応する場合は、数量入力フィールドの引数をフィルターで変更する。以下のコードは、テーマのfunctions.phpやCode Snippetsプラグインに追加する想定だ。

add_filter( 'woocommerce_quantity_input_args', 'allow_decimal_quantity', 10, 2 );

function allow_decimal_quantity( $args, $product ) {
    $args['step']  = '0.1';
    $args['min_value'] = '0.1';
    return $args;
}

ただし、このコードだけではフロント側の入力欄が小数に対応するだけで、Store APIの検証までは通過しないことがある。チェックアウトブロックを使う場合は、API側のスキーマを拡張する追加のフィルターが必要になる。Store APIのline_itemsで数量の型を変更するには、より深い層への対応が求められる。

実務では、Store API対応を自前で実装するより、小数数量対応をうたうプラグインを利用する方がリスクが小さい。APIスキーマの変更はアップデートで挙動が変わる可能性があり、受注データの整合性にも関わるためだ。

小数数量が必要な商品の販売方法を再設計する

エラーの対処と並行して、そもそも小数数量を使わずに済む販売設計を検討するのも有効だ。商品の性質によっては、属性(バリエーション)を使う方がシンプルで顧客にも分かりやすい。

よく買われるサイズをバリエーションで用意する

布地やケーブルなら「50cm」「1m」「1.5m」「2m」のように、よく注文されるサイズをあらかじめバリエーションとして登録する。顧客は数量1を選ぶだけで済み、小数入力は不要になる。在庫管理も単位が明確になるため、発注ミスも減らせる。

計量販売プラグインの活用

重量や長さに応じて価格を自動計算する計量販売向けの拡張を使う手もある。顧客が重さや長さを入力すると、対応する価格が自動で表示される仕組みだ。この方式なら小数数量を直接カートに入れる必要がなく、エラーの発生を回避できる。

よくある質問

小数数量を使うと必ずこのエラーになりますか

いいえ。従来のクラシックチェックアウト(ショートコード方式)では、フロント側で小数を許可していれば通ることがある。エラーが起きやすいのはチェックアウトブロックを使っており、Store API経由で注文を送信する構成だ。

商品ごとに小数数量を許可できますか

できる。小数数量対応プラグインの多くは商品単位で設定を持っており、小数を許可する商品と整数のみの商品を混在させられる。カスタムコードでも商品IDやカテゴリを条件にフィルターを適用できる。

数量単位をgに変更すると在庫管理はどうなりますか

在庫数も新しい単位に合わせて記録し直す必要がある。1kgの在庫は1000gとして登録し、SKUも単位が分かる体系に変更するのが望ましい。既存の注文履歴には影響しないため、商品単価と在庫数を慎重に更新すればよい。

すでに小数数量で登録した商品がある場合はどうすればよいですか

商品データを確認し、数量の刻み幅や単位設定を見直す。複数商品を一括で変更するなら、WooCommerce標準の商品CSVエクスポート・インポート機能を使うと効率的だ。変更後はテスト注文で必ず動作を確認する。

チェックアウトブロックだけでエラーになるのはなぜですか

チェックアウトブロックはStore APIというREST API経由で注文データをサーバーに送信する。このAPIがline_itemsを検証する際、数量を整数としてチェックするため、小数が混ざると検証エラーになる。クラシックチェックアウトは別の送信方式のため、同じ条件でも通ることがある。

この記事のポイント

  • 小数数量の購入エラーはStore APIのline_items検証が原因
  • もっとも手軽な対処は数量単位を変えて整数で販売すること
  • 小数数量を維持したい場合は対応プラグインの導入が有効
  • チェックアウトブロック対応の有無を確認してからプラグインを選ぶ
  • カスタムコードはフロント側だけでは不十分でAPI側の対応も必要
  • 属性や計量販売方式への再設計も検討価値がある
佐々木 太陽

・ Reddit、Stack Overflow、WordPress.org フォーラムを日々巡回し、現場の悩みを拾い上げて記事化 ・ WordPress、WooCommerce、Next.js などモダンWeb制作領域のトラブルシューティングが専門 ・ 「検索しても答えが見つからなかった」を一つでも減らすことが目標 ・ エラーメッセージから根本原因にたどり着く粘り強い調査が得意 ・ 初心者がつまずきやすい箇所を先回りで解決する記事作りを心がけている

メッセージを残す