2026年5月20日
2026年5月20日
WooCommerceの送料計算が正しくない場合の解決方法
はじめに
WooCommerceで送料が正しく計算されない場合、配送ゾーンの設定ミス、商品の重量・寸法未設定、セッションキャッシュなどが原因として挙げられます。
症状・原因
- 送料が0円になる / 表示されない
- 全注文に同じ送料が適用される
- 送料無料条件を満たしているのに送料が発生する
- 離島・沖縄に対して正しい送料が適用されない
解決手順
ステップ1:配送ゾーンの設定を確認する
WooCommerce → 設定 → 配送 → 配送ゾーン
設定例:
ゾーン1: 日本全国
- 地域: 日本
- 配送方法: 定額配送(¥500)/ 送料無料(¥5,000以上)
ゾーン2: 沖縄・離島
- 地域: 沖縄県
- 配送方法: 定額配送(¥1,500)
「それ以外の地域」(ゾーン外):
- 配送方法を設定しないと該当地域への注文は配送不可
ステップ2:送料無料条件を設定する
配送ゾーン → 配送方法を追加 → 送料無料
送料無料の要件:
- なし(常に無料)
- 有効なクーポン
- 最低注文金額(例: ¥5,000以上)
- 最低注文金額またはクーポン
# 送料設定を確認(WP-CLI)
wp option get woocommerce_shipping_debug_mode
wp wc shipping_zone list --user=admin --format=table
wp wc shipping_zone_method list 1 --user=admin --format=table # ゾーンID=1の配送方法
ステップ3:送料キャッシュをクリアする
# セッションと送料キャッシュをクリア
wp wc tool run clear_sessions --user=admin
wp wc tool run clear_transients --user=admin
wp cache flush
# 送料デバッグモードを有効化
wp option update woocommerce_shipping_debug_mode yes
デバッグモードを有効にすると、カートページで各配送方法の計算過程が表示されます。
ステップ4:商品の重量・寸法を設定する
重量ベースの送料計算をする場合、商品に重量が設定されていないと計算できません。
# 商品の重量を設定
wp wc product update 123 --weight=0.5 --user=admin # 0.5kg
# 商品の寸法を設定(長さ×幅×高さ cm)
wp wc product update 123 --dimensions='{"length":"30","width":"20","height":"10"}' --user=admin
ステップ5:送料計算のカスタマイズ
// functions.php — 特定条件で送料を変更
add_filter('woocommerce_package_rates', function($rates, $package) {
// カートに特定の商品カテゴリがある場合は送料無料
foreach (WC()->cart->get_cart() as $item) {
if (has_term('heavy-item', 'product_cat', $item['product_id'])) {
foreach ($rates as $key => $rate) {
if ($rate->method_id === 'free_shipping') {
unset($rates[$key]); // 重量物は送料無料を除外
}
}
}
}
return $rates;
}, 10, 2);
注意事項
- 配送ゾーンは上から順に評価されます。顧客の住所が複数のゾーンに一致する場合、リスト上位のゾーンが適用されます
- キャッシュプラグインを使用している場合、カートページとチェックアウトページをキャッシュ除外リストに追加してください
- デバッグモードは本番環境では必ず無効化してください
まとめ
送料計算の問題は「配送ゾーンの設定確認 → セッションキャッシュのクリア → デバッグモードで詳細確認」の順で対処します。wp wc tool run clear_transients と wp option update woocommerce_shipping_debug_mode yes がデバッグの第一歩です。