2026年6月24日

2026年6月24日

WooCommerceの在庫管理が正しく動作しない場合の原因と修正手順

WooCommerceで「注文が入ったのに在庫が減らない」「在庫0なのに購入できてしまう」「キャンセルしても在庫が戻らない」といった問題は、設定の見落としか、在庫が増減するタイミングの誤解が原因であることが大半です。この記事では、在庫が動く仕組みを押さえたうえで、設定の確認ポイント、症状別の原因と直し方、原因が分からないときのログの取り方までを順に説明します。

作業の前に

在庫数は売上や出荷に直結するデータです。設定を変えたり在庫数を一括で修正したりする前に、データベースのバックアップを取ってください。営業中のショップでは、注文の少ない時間帯に作業するか、ステージング環境で再現してから本番に反映するのが安全です。

在庫が増減するタイミングを理解する

WooCommerceは、カートに商品を入れた時点では在庫を減らしません。在庫が減るのは、注文のステータスが次のいずれかになったときです。

  • 「処理中」(決済が完了した注文)
  • 「保留中」(銀行振込など、入金確認待ちの注文)
  • 「完了」

一方、「支払い待ち」の注文では在庫は減りません。その代わり、設定した時間だけ在庫を一時的に確保し、その間に支払いが完了しなければ注文はキャンセルされます。1つの注文で在庫が二重に減らないよう、在庫を減らした注文には記録が付き、2回目以降は処理されません。

在庫が戻るのは、在庫を減らした注文が「キャンセル」になったときです。返金の場合は、返金画面で商品を在庫に戻す指定をしたときに戻ります。返金しただけでは在庫は戻らない点がつまずきやすいところです。

注文の編集画面にある「注文メモ」には、在庫の増減が記録されます。在庫が減ったかどうかを確かめたいときは、まず注文メモを見てください。

設定の確認ポイント

ショップ全体の設定

「WooCommerce」→「設定」→「商品」→「在庫」で、次の項目を確認します。項目名はバージョンや翻訳によって多少異なります(2026年10月現在)。

  • 在庫管理の有効化:ここが無効だと、商品ごとの在庫数の入力欄が表示されず、在庫は減りません。
  • 在庫の保留時間(分):支払い待ちの注文のために在庫を確保しておく時間です。空欄にすると、未払い注文の自動キャンセルが行われなくなります。
  • 在庫僅少・在庫切れのしきい値:在庫切れとみなす数を 0 以外にしていると、在庫が残っていても在庫切れ表示になります。
  • 在庫切れ商品の表示:在庫切れ商品を一覧から隠す設定です。商品が「消えた」ように見えるときは、ここを確認します。

商品ごとの設定

商品編集画面の「商品データ」→「在庫」タブで、商品レベルの在庫管理を有効にし、在庫数を入力します。この欄がオフのままだと、「在庫あり」「在庫切れ」の状態を手動で選ぶだけになり、注文が入っても数は管理されません。

同じタブの「入荷待ち(バックオーダー)」を許可していると、在庫が 0 以下になっても注文を受け付けます。「在庫0なのに買えてしまう」場合は、まずここを確認します。

バリエーション商品

サイズや色ごとに在庫を管理する場合は、各バリエーションの設定で在庫管理を有効にし、それぞれに在庫数を入れます。バリエーション側で在庫管理をオフにしていると、親商品の在庫数が共有されます。「Sサイズが売れたのにMサイズの在庫まで減った」という場合は、この共有が原因です。

症状別の原因と直し方

注文が入っても在庫が減らない

  1. 注文のステータスを確認します。「支払い待ち」のままなら、決済が完了していないため在庫は減っていません。
  2. 決済が完了しているのに「支払い待ち」のままなら、決済プラグインから WooCommerce への完了通知(Webhook など)が届いていない可能性があります。「WooCommerce」→「ステータス」→「ログ」で決済プラグインのログを確認し、決済サービス側の管理画面で通知の送信先や失敗履歴を見てください。
  3. 注文メモに在庫の記録がない場合は、上記の全体設定と商品ごとの設定を見直します。

キャンセルや返金で在庫が戻らない

キャンセルで戻るのは、在庫を一度減らした注文だけです。「支払い待ち」のままキャンセルされた注文は、もともと在庫を減らしていないので戻りません。返金の場合は、返金時に在庫へ戻す指定をしたかを確認し、していなければ在庫数を手動で修正します。

在庫数は正しいのに、表示が古い

ページキャッシュやCDNを使っていると、商品ページが在庫の変わる前の状態で表示されます。キャッシュプラグインの設定で、在庫変更時に該当ページのキャッシュが削除されるようになっているかを確認してください。

商品一覧の絞り込みや並び替えで在庫状態が合わない場合は、「WooCommerce」→「ステータス」→「ツール」にある商品ルックアップテーブルの再生成を実行すると直ることがあります。

在庫が勝手に変わる

外部の在庫連携サービス、モール連携プラグイン、CSVインポートなどが在庫数を上書きしている可能性があります。最近追加したプラグインや、定期的に動く連携処理がないかを確認してください。原因を絞り込むには、次の項目で説明するログが役立ちます。

WP-CLI で在庫の状態を確認・修正する

SSH で WP-CLI が使える環境なら、商品の在庫設定をまとめて確認できます。--user には管理者のユーザーIDかログイン名を指定します。

# 商品ID 123 の在庫設定を確認
wp wc product get 123 --fields=id,name,manage_stock,stock_quantity,stock_status --user=1

# 在庫管理を有効にし、在庫数を10に修正
wp wc product update 123 --manage_stock=true --stock_quantity=10 --user=1

データベースの在庫の値を SQL で直接書き換えると、在庫状態やキャッシュとの整合が取れなくなります。修正は管理画面か、上のような WooCommerce の仕組みを通して行ってください。

原因が分からないときは在庫の変更をログに残す

いつ、どの商品の在庫が変わったのかを記録すると、原因の特定が早くなります。在庫数が変更されたときに呼ばれるフックを使い、WooCommerce のログに書き出す例です。

// 子テーマの functions.php やコードスニペット系プラグインに追加(調査が終わったら削除)
function my_log_stock_change( $product ) {
    wc_get_logger()->info(
        sprintf(
            'Stock changed: #%d %s -> %s',
            $product->get_id(),
            $product->get_name(),
            wc_stock_amount( $product->get_stock_quantity() )
        ),
        array( 'source' => 'stock-debug' )
    );
}
add_action( 'woocommerce_product_set_stock', 'my_log_stock_change' );
add_action( 'woocommerce_variation_set_stock', 'my_log_stock_change' );

記録は「WooCommerce」→「ステータス」→「ログ」で stock-debug を選ぶと確認できます。注文とは関係のない時刻に在庫が変わっていれば、連携処理やインポートが原因と考えられます。

まとめ

  • 在庫が減るのは注文が「処理中」「保留中」「完了」になったとき。「支払い待ち」では減らず、一時的に確保されるだけ
  • まず全体設定の在庫管理、商品ごとの在庫管理、入荷待ちの許可、在庫切れのしきい値を確認する
  • バリエーションで在庫管理をオフにすると親商品の在庫が共有される
  • 在庫が減らないときは注文ステータスと決済の完了通知、表示が古いときはキャッシュを疑う
  • 修正は管理画面か WP-CLI で行い、原因が分からなければ在庫変更をログに残して調べる

お気軽にご相談ください

お見積りへ お問い合わせへ
▲