
WooCommerceで特定カテゴリの商品にだけ、カートに追加する時点で「上限金額」を設定したいと思い、PHPスニペットを組んでみたのですが……。
何度やっても、上限金額ぴったりをカートに追加するとエラーが出る!
原因をさぐるため、ChatGPTの力を借りたのですが、想像以上に大変で、数日間完全に沼ってしまいました。
試行錯誤して、スレッド3回目でやっと原因が分かり、上限設定できました。
カテゴリ単位で上限額を設定したかった理由
わたしが運営しているオンラインショップでは、メイン商品の「またたび猫キッカー」を現在月に一度、期間を限定して販売しています。
手作りで少量ずつしかご用意できないのですが、販売開始から1時間程で完売してしまうような状況が続いていました。
そのため、一度にまとめてご購入される方が増えていることもあり、「購入しようとしたら、すでに完売だった…」という声も頂くようになりました。
できるだけ多くの猫たちに届けたい、そんな思いから、「猫キッカーのご購入は15,000円まで」とさせていただくことにしました。
📃MEMO:後日、完売までの時間がさらに短くなり、購入数制限に踏み切りました。この記事では、備忘録もかねて記録を残しておくことにしました。
関連記事:🔗 WooCommerceでカテゴリ単位で購入数制限の設定
WooCommerceでカテゴリ単位で上限額を設定する方法
使用したのは、「WPCode」というプラグイン。簡単にPHPコードを追加することができます。
🔗 WCcode
猫キッカーのカテゴリー限定で、「カートに追加する時点」で15,000円までの制限をかけたいので、woocommerce_add_to_cart_validation
フィルターを使いました。
条件は以下の通り:
- 指定カテゴリ(ここでは スラッグ / cat-toys)の商品にのみ適用
- 税込価格の合計で判断(割引やクーポンは考慮しない)
- 合計が15,000円ちょうどまで、カートに入れてほしい(←ここが重要)
つまずいたポイント
最初は、 if ( $after_total > 15000 ) と書いていましたが、ぴったり15,000円をカートに入れると、エラーメッセージが出てしまう。15,000円ぴったりまではカートに追加できるよう設定したはずなのに。
ここから沼って数日を費やすことに。
原因は、カートに15000円ぴったりを入れたつもりでも、WooCommerce内部では、商品価格に小数点以下(例:15000.90909円など)が生じて、 実際は15000円を超えていると判定されていたのです。

これは、ログで判明しました。早くここを確認すればよかった!
おそらく「税込価格の計算」や「数量を掛けたあとの結果」で、小数の誤差が生じてしまっていたようです。
解決のために行ったこと
line_total
とline_tax
を合計してカート合計を出す方式に変更bccomp()
という関数を使って、文字列として少数第2位までの比較に切り替え- 上限金額は内部的には「15,200円」に設定(少し余裕をもたせた)
- ウェブサイト上は「15,000円まで」として案内
このようにすることで、テスト購入で”内部上限値”を少しずつ調整し、ようやく「15,000円ちょうどで通過、15,201円以上でブロック」ができるようになりました。
(何度も何度もテスト購入して確かめました。ふ~。)
15,000円ぴったりでは、woocommerce内部で15,000円に端数が発生し、上限額超過と見なされエラーになるため、やむを得ず、 `limit_yen = ‘15200.00’` という設定で、ウェブサイト上では15,000円まで購入可能としつつ、実際は15,200円までは購入ができるという方法で、なんとかクリアしました。
使用したコード
以下に、最終的に使用したコード(スニペット)を掲載しておきます。
カテゴリ毎の上限額設定のコード(ここをクリックで表示)
<?PHP
add_filter( 'woocommerce_add_to_cart_validation', 'wc_cat_toys_addition_limit_bccomp_adjusted', 10, 3 );
function wc_cat_toys_addition_limit_bccomp_adjusted( $passed, $product_id, $quantity ) {
$target_category = 'cat-toys';
$limit_yen = '15200.00'; // 内部的な制限額(ウェブサイト上は15000円)
$cart_total = 0;
foreach ( WC()->cart->get_cart() as $item ) {
if ( has_term( $target_category, 'product_cat', $item['product_id'] ) ) {
$cart_total += $item['line_total'] + $item['line_tax'];
}
}
$product = wc_get_product( $product_id );
if ( ! $product ) {
return $passed;
}
$price_incl_tax = wc_get_price_including_tax( $product );
$addition_total = $price_incl_tax * $quantity;
$after_total = $cart_total + $addition_total;
if ( bccomp( (string) $after_total, $limit_yen, 2 ) === 1 ) {
wc_add_notice( '猫キッカーは、税込15,000円までのご注文とさせていただいております。申し訳ありませんが、ご協力をお願いいたします。', 'error' );
return false;
}
return $passed;
}
最後に
woocommerceで特定カテゴリの購入金額の上限設定について、備忘録としてまとめてみました。
何度もコードを書き換えて、途中かなり混乱もしましたが、無事に金額の上限を設定できてよかったです。
WooCommerceの「金額計算」の内部を知ることができたり、かなり勉強になりました。
この記事が、同じような設定を試されようとしている方のヒントになればうれしいです。