タグアーカイブ フィルターフック

カートが0円だとWooCommerceの注文が完了しない時の直し方

カートが0円だとWooCommerceの注文が完了しない時の直し方

なぜカート合計が0円だとチェックアウトが完了しないのか

なぜカート合計が0円だとチェックアウトが完了しないのか

WooCommerce の最低購入金額制御プラグイン(たとえば Minimum Purchase Amount Control など)は、指定した金額未満の注文を受け付けないように設計されている。このプラグインは通常、カートの合計金額が設定した最低金額を下回るとチェックアウトをブロックする。しかし「無料商品を許可する」「クーポンで0円になる場合を許可する」といった例外ルールを設定していても、内部的にはチェックアウト処理の最終段階で金額を再評価し、ブロックをかけてしまうケースがある。

このとき画面上では「注文する」ボタンを押せてしまい、一見すると購入が完了したように見える。ところが実際には注文データが正しく確定されず、商品がカートに取り残される。リダイレクト先の注文確認ページ(サンキューページ)にも遷移しない。プラグインを停止すると問題が消えることから、プラグインのゼロ円ブロック機能が直接の原因だ。

フィルターフックでゼロ円チェックアウトを許可する手順

フィルターフックでゼロ円チェックアウトを許可する手順

このプラグインには、ゼロ円の注文を許可するための専用フィルターフック ct_mpac_allow_zero_total が用意されている。このフックを有効にすれば、無料商品やクーポンで合計が0円になったカートでも問題なくチェックアウトが完了するようになる。

以下の手順では、子テーマの functions.php に数行のコードを追加する。子テーマを使っていない場合は、Code Snippets プラグインなどを利用しても同じ結果が得られる。

STEP 1 子テーマの functions.php を開く(外観 → テーマファイルエディター)
STEP 2 ファイル末尾に以下のコードを追加する
STEP 3 ファイルを更新して保存する
STEP 4 0円になる商品をカートに入れてチェックアウトをテストする

追加するコードは次のとおりだ。

add_filter( 'ct_mpac_allow_zero_total', '__return_true' );

この1行で、プラグインがゼロ円の注文を許可するようになる。__return_true は WordPress の組み込み関数で、単純に true を返す。フィルターにこれを渡すことで「常に許可する」という挙動に切り替わる仕組みだ。

Code Snippets プラグインを使う場合は、新規スニペットを追加し、上記のコードを貼り付けて「サイト全体で実行」に設定すればよい。

コード追加後も改善しない場合の確認ポイント

コード追加後も改善しない場合の確認ポイント

フィルター名がプラグインのバージョンと合っているか確認する

プラグインのバージョンアップによってフィルター名が変更されている可能性がある。プラグインの公式ドキュメントやソースコード内で apply_filters を検索し、最新のフック名を確認するのが確実だ。特にプラグイン名が似ている別の最低購入金額プラグインに乗り換えた場合は、フック名がまったく異なるため注意が必要になる。

キャッシュ系プラグインやサーバーキャッシュの影響を疑う

functions.php を更新したのに改善しない場合、WordPress のキャッシュプラグインやサーバーレベルのキャッシュ(OPcache など)が原因で変更が反映されていないことがある。キャッシュをすべてクリアし、さらにブラウザのシークレットモードで動作をテストしてみる。OPcache が効いているレンタルサーバーでは、ファイル更新から数分間は古いコードが動き続けるケースもある。

決済ゲートウェイ側のゼロ円制限を調べる

ごくまれに、WooCommerce の決済ゲートウェイ自体が0円のトランザクションを許可していない場合がある。プラグインの問題が解消されたあともチェックアウトが進まないときは、Stripe や PayPal などのゲートウェイ設定で「0円の注文を許可する」オプションが存在しないか確認する。テスト用に代金引換や銀行振込など、実決済を伴わないゲートウェイに切り替えて試すのも有効な切り分け方法だ。

よくある質問

このフィルターはどのプラグインに対応しているのか

ct_mpac_allow_zero_total は、主に「Minimum Purchase Amount Control for WooCommerce」系のプラグインで使われるフックだ。プラグインの作者が異なるとフック名も変わるため、必ず利用中のプラグインのドキュメントを参照してほしい。

フィルターを追加する以外の解決策はあるか

プラグインの設定画面で「無料商品を許可」「クーポン適用後の0円を許可」といったチェックボックスが用意されていれば、そちらを有効にするだけで直ることもある。設定が存在しない場合や、設定を入れても効かないときにフィルターを使うのが確実な方法だ。

ゼロ円の注文を許可するとセキュリティ上のリスクはあるか

意図した無料商品や割引クーポン以外で0円になるカートが発生しないよう、クーポンの利用条件や商品価格の設定を適切に管理していれば大きなリスクにはならない。ただし、テストや不正利用対策として、定期的に0円注文のログを確認する運用は推奨する。

子テーマを使わずにコードを追加する方法はあるか

Code Snippets プラグインや WPCode プラグインを利用すれば、テーマファイルを直接編集せずにフィルターフックを安全に追加できる。テーマのアップデートでコードが消える心配もなく、管理画面からオンオフを切り替えられるため、まずはこちらを試すのが安心だ。

この記事のポイント

  • WooCommerce の最低購入金額プラグインが0円の注文をブロックし、チェックアウトが完了しない
  • フィルターフック ct_mpac_allow_zero_totalfunctions.php に追加すればゼロ円注文を許可できる
  • Code Snippets プラグインを使えば子テーマの編集なしで安全にコードを追加可能
  • 改善しない場合はキャッシュのクリアや決済ゲートウェイの0円制限も確認する