2026年5月21日
2026年5月21日
WooCommerceの税率・消費税計算エラーを解決する方法
はじめに
WooCommerceの消費税計算が正しくない・税込み価格が表示されない・カートと注文確認で税額が変わる問題は、税率設定の不備・価格入力方法(税込み/税抜き)の設定ミス・キャッシュが原因です。
症状・原因
- 商品価格に消費税が加算されない・二重に加算される
- カート画面と注文確認で合計金額が変わる
- 税率を変更したのに古い税率が適用される
- 特定の商品カテゴリだけ税率が違う(軽減税率)
解決手順
ステップ1:税率設定の現状を確認する
# 税率設定を確認
wp option get woocommerce_calc_taxes # yes/no
wp option get woocommerce_prices_include_tax # yes=税込入力, no=税抜入力
wp option get woocommerce_tax_display_shop # incl/excl
wp option get woocommerce_tax_display_cart # incl/excl
# 登録済み税率を確認
wp eval "
global \$wpdb;
\$rates = \$wpdb->get_results(
\"SELECT * FROM {$wpdb->prefix}woocommerce_tax_rates ORDER BY tax_rate_order\"
);
foreach (\$rates as \$rate) {
printf('ID:%d Class:%s Rate:%s%% Name:%s Country:%s' . PHP_EOL,
\$rate->tax_rate_id,
\$rate->tax_rate_class ?: 'standard',
\$rate->tax_rate,
\$rate->tax_rate_name,
\$rate->tax_rate_country
);
}
"
ステップ2:税率を正しく設定する
// functions.php: 税率をプログラムで登録・管理
// ① 日本の消費税率(標準税率10%・軽減税率8%)を登録
function register_japan_tax_rates(): void {
global $wpdb;
// 既存の税率を確認
$existing = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->prefix}woocommerce_tax_rates");
if ($existing > 0) {
return;
}
// 標準税率(10%)を登録
$wpdb->insert("{$wpdb->prefix}woocommerce_tax_rates", [
'tax_rate_country' => 'JP',
'tax_rate_state' => '',
'tax_rate' => '10.0000',
'tax_rate_name' => '消費税(標準税率)',
'tax_rate_priority' => 1,
'tax_rate_compound' => 0,
'tax_rate_shipping' => 1,
'tax_rate_order' => 1,
'tax_rate_class' => '',
]);
// 軽減税率(8%)用のタックスクラスを作成
$tax_classes = WC_Tax::get_tax_classes();
if (!in_array('reduced-rate', $tax_classes, true)) {
WC_Tax::create_tax_class('軽減税率(8%)', 'reduced-rate');
}
// 軽減税率(8%)を登録
$wpdb->insert("{$wpdb->prefix}woocommerce_tax_rates", [
'tax_rate_country' => 'JP',
'tax_rate_state' => '',
'tax_rate' => '8.0000',
'tax_rate_name' => '消費税(軽減税率)',
'tax_rate_priority' => 1,
'tax_rate_compound' => 0,
'tax_rate_shipping' => 0,
'tax_rate_order' => 2,
'tax_rate_class' => 'reduced-rate',
]);
}
add_action('init', 'register_japan_tax_rates');
ステップ3:価格表示と税計算を正確にする
// functions.php: 税込み・税抜き価格の表示をカスタマイズ
// ① 商品価格を税込みで表示
add_filter('woocommerce_get_price_html', function(string $price, WC_Product $product): string {
if (get_option('woocommerce_tax_display_shop') === 'excl') {
$incl_price = wc_get_price_including_tax($product);
$price .= sprintf(
' <span class="tax-note">(税込 %s)</span>',
wc_price($incl_price)
);
}
return $price;
}, 10, 2);
// ② 税込み価格を計算して取得
function get_product_price_with_tax(int $product_id): array {
$product = wc_get_product($product_id);
if (!$product) {
return [];
}
return [
'price_excl_tax' => wc_get_price_excluding_tax($product),
'price_incl_tax' => wc_get_price_including_tax($product),
'tax_amount' => wc_get_price_including_tax($product) - wc_get_price_excluding_tax($product),
'tax_rate' => WC_Tax::get_rates($product->get_tax_class()),
];
}
// ③ カートの税額表示を調整
add_filter('woocommerce_cart_totals_order_total_html', function(string $value): string {
if (WC()->cart->get_tax_totals()) {
$value .= ' <small class="includes_tax">' . WC()->cart->get_tax_totals_html() . '</small>';
}
return $value;
});
ステップ4:軽減税率を商品カテゴリに適用する
// functions.php: 食品カテゴリに軽減税率(8%)を自動適用
// ① 商品をカートに追加した時に税クラスを設定
add_filter('woocommerce_add_cart_item_data', function(array $cart_item_data, int $product_id): array {
if (has_term('food', 'product_cat', $product_id)) {
$cart_item_data['tax_class'] = 'reduced-rate';
}
return $cart_item_data;
}, 10, 2);
// ② 商品の税クラスをカテゴリで自動設定
add_filter('woocommerce_product_get_tax_class', function(string $tax_class, WC_Product $product): string {
if (has_term('food', 'product_cat', $product->get_id())) {
return 'reduced-rate';
}
return $tax_class;
}, 10, 2);
// ③ 軽減税率商品の一覧を確認
add_action('init', function(): void {
if (!isset($_GET['check_tax_class']) || !current_user_can('administrator')) {
return;
}
$products = wc_get_products(['category' => ['food'], 'limit' => 20]);
foreach ($products as $product) {
printf('[Tax Debug] %s: class=%s' . PHP_EOL,
$product->get_name(), $product->get_tax_class());
}
});
ステップ5:税計算のキャッシュと丸め処理を調整する
# 税設定のキャッシュをクリア
wp eval "WC_Tax::get_rates.cache = [];" 2>/dev/null || true
wp transient delete --all
wp cache flush
# 税率設定を WP-CLI で直接更新
wp eval "
update_option('woocommerce_calc_taxes', 'yes');
update_option('woocommerce_prices_include_tax', 'no'); // 税抜き入力
update_option('woocommerce_tax_display_shop', 'incl'); // 店舗は税込み表示
update_option('woocommerce_tax_display_cart', 'incl'); // カートも税込み表示
update_option('woocommerce_tax_round_at_subtotal', 'yes'); // 小計で丸め
echo '税設定を更新しました';
"
// functions.php: 税計算の丸め処理をカスタマイズ
add_filter('woocommerce_tax_round_at_subtotal', '__return_true'); // 小計で丸め(デフォルト)
// 税額の端数を切り捨て(独自ルールの場合)
add_filter('wc_tax_rounding_mode', function(): string {
return 'floor'; // 'round'(四捨五入)/ 'ceil'(切り上げ)/ 'floor'(切り捨て)
});
// 注文確認ページの税表示をカスタマイズ
add_filter('woocommerce_order_tax_totals', function(array $tax_totals, WC_Order $order): array {
foreach ($tax_totals as $code => $tax) {
if (str_contains($code, 'reduced')) {
$tax_totals[$code]->label = '消費税(軽減税率8%)';
} else {
$tax_totals[$code]->label = '消費税(標準税率10%)';
}
}
return $tax_totals;
}, 10, 2);
注意事項
- WooCommerceの価格入力方法(税込み入力か税抜き入力か)は「WooCommerce → 設定 → 税金 → 価格の入力方法」で決まります。途中で変更すると全商品の価格表示が変わるため、サイト開設時に決定してください
- 軽減税率対象商品には必ず商品編集画面の「税金クラス」で「軽減税率」を設定してください。フィルターで自動設定する場合はキャッシュが残ることがあるため、設定後にキャッシュをクリアしてください
- インボイス制度対応として、適格請求書発行事業者登録番号(T+13桁)をメールテンプレートや注文書に表示する必要があります。WooCommerce Germanizedなどのプラグインを活用してください
まとめ
WooCommerce税計算エラーの解決は①woocommerce_calc_taxesとwoocommerce_prices_include_taxオプションで現在の設定を確認、②woocommerce_tax_ratesテーブルに標準税率10%と軽減税率8%を登録、③woocommerce_get_price_htmlフィルターとwc_get_price_including_tax()で税込み価格を正確に表示、④woocommerce_product_get_tax_classフィルターで食品カテゴリに軽減税率を自動適用、⑤wc_tax_rounding_modeフィルターで端数処理ルールを設定しキャッシュをクリアします。