2026年5月31日
2026年5月31日
WPML+WooCommerceで通貨切替が動かないときの原因と直し方
WPML と WooCommerce の組み合わせで通貨切替が効かない場合、原因の多くは「マルチ通貨モードや言語ごとの通貨設定が有効になっていない」「ページキャッシュが切替前の価格を返している」「テーマや別プラグインの通貨機能とぶつかっている」の3つに集約されます。この記事では、WPML 公式のアドオン「WooCommerce Multilingual & Multicurrency」(以下 WCML)の設定を順に確認し、キャッシュと競合を切り分けて、通貨が切り替わるところまで戻す手順をまとめます。
まず症状を切り分ける
「動かない」にもいくつかの型があり、型によって疑う場所が変わります。作業前に、どれに当てはまるかを確認してください。
- 通貨切替のドロップダウン自体が表示されない
- 切替を選んでも価格がデフォルト通貨のまま変わらない
- 商品ページでは切り替わるが、カートや決済画面で元の通貨に戻る
- ログイン中は切り替わるのに、ログアウトした状態(一般の訪問者)では切り替わらない
- 言語を切り替えると、選んだ通貨がリセットされる
最後の2つは設定ミスではなく仕様やキャッシュが原因であることが多く、最初の2つは設定の抜けであることが多い、というのが大まかな傾向です。確認はブラウザのシークレットウィンドウ(ログアウト状態)と、管理者でログインした通常ウィンドウの両方で行うと、キャッシュ由来かどうかがすぐに分かります。
作業前の準備
通貨設定はショップの価格表示と決済に直結します。設定を触る前に、データベースとファイルのバックアップを取ってください。可能であればステージング環境で再現させてから本番に反映するのが安全です。
あわせて、WordPress 本体・WooCommerce・WPML・WCML のバージョンを控えておきます。WCML は WooCommerce の更新に追従して頻繁に改修されており、片方だけ古いと通貨まわりの不具合が出やすくなります。WCML の管理画面にはステータス(状態)を確認するタブがあり、必要なプラグインの不足や未完了の設定があれば警告が表示されるので、最初に目を通しておくと手戻りが減ります。
原因1:マルチ通貨モードと言語ごとの通貨設定
マルチ通貨モードが有効か
WCML の設定画面(WooCommerce メニュー配下の「WooCommerce Multilingual & Multicurrency」)にあるマルチ通貨のタブで、マルチ通貨モードが有効になっているかを確認します。ここがオフのままでは、通貨を追加しても切替は機能しません。(2026年10月現在)画面の構成や項目名はバージョンによって変わることがあるため、見当たらない場合は WPML 公式ドキュメントで最新の表記を確認してください。
通貨が追加され、為替レートが入っているか
追加した通貨ごとに為替レートを設定します。レートが空欄や 0 のままだと、価格が表示されなかったり、デフォルト通貨のまま表示されたりする原因になります。自動レート取得を使っている場合は、取得元サービスの設定や API キーが有効かどうかも確認してください。
商品ごとに通貨別の価格を手入力する運用(自動換算ではなく固定価格)を選んでいる場合は、その商品編集画面で該当通貨の価格が入っているかも見ます。入力のない商品だけ切り替わらない、という症状はここが原因です。
言語ごとに表示する通貨が絞られていないか
WCML には「どの言語でどの通貨を使えるか」を指定する設定があります。たとえば日本語ページでは日本円しか有効にしていなければ、日本語ページの切替ドロップダウンには選択肢が出ません。言語と通貨の組み合わせ表で、表示したい言語の列にチェックが入っているかを確認してください。
言語を切り替えたときに通貨が戻るのは、言語ごとの「既定の通貨」が設定されているためであることが多く、不具合ではなく設定どおりの動作です。言語を変えても通貨を保持したい場合は、言語ごとの既定通貨の扱いを見直します。
原因2:ページキャッシュが切替前の価格を返している
ログイン中は切り替わるのにログアウト状態で切り替わらない場合、最も疑わしいのはページキャッシュです。キャッシュ系プラグインやサーバーのキャッシュは、多くの場合ログインユーザーにはキャッシュを返さない設定になっているため、この差が出ます。
通貨の選択は、WooCommerce のセッションや Cookie の仕組みを使って訪問者ごとに保持されます。ところがページキャッシュは「URL ごとに1つの HTML」を保存して全員に返すため、最初に保存された通貨の価格が、ほかの訪問者にもそのまま表示されてしまいます。
対処の考え方は次のとおりです。
- カート・決済・マイアカウントのページをキャッシュ対象から外す(WooCommerce の基本設定で、多くのキャッシュプラグインが既定で除外しています)
- 商品ページやショップページもキャッシュしている場合は、通貨を保持する Cookie によってキャッシュを分ける、またはキャッシュを無効にする
- WCML 側にキャッシュ環境向けの設定(通貨切替や価格表示を後から読み込む方式など)が用意されている場合は、それを有効にする
- サーバー側キャッシュや CDN(Cloudflare など)でも HTML をキャッシュしていないかを確認する
どのキャッシュが効いているかが分からない場合は、キャッシュ系プラグインを一時的に停止し、サーバー管理画面のキャッシュ機能もオフにして、シークレットウィンドウで再確認します。それで直れば原因はキャッシュに絞れるので、除外設定を入れたうえで1つずつ元に戻してください。
原因3:決済画面で通貨が元に戻る
商品ページでは切り替わるのに決済画面でデフォルト通貨に戻る場合は、決済方法(ゲートウェイ)が選んだ通貨に対応していない可能性があります。決済サービスによって扱える通貨が限られており、未対応の通貨では決済できないため、結果としてデフォルト通貨で請求される、あるいは決済方法そのものが表示されなくなります。
WCML のバージョンによっては、通貨ごとに使える決済方法を指定する設定があります。利用している決済プラグインと決済サービスの管理画面で、対象通貨が有効になっているかを確認してください。テストは、決済サービスのテストモードで少額の注文を通して行うのが確実性の高い方法です。
原因4:テーマや別プラグインとの競合
通貨切替プラグインの二重導入
WCML とは別に、汎用のマルチ通貨プラグインを導入している場合、両方が価格を書き換えようとしてどちらの切替も正しく動かなくなります。通貨切替の仕組みは1つに統一してください。テーマに独自の通貨切替機能が付いている場合も同様で、使わない側の機能はオフにします。
JavaScript の結合・遅延読み込み
通貨切替のドロップダウンは JavaScript で動作し、選択時に裏側でサーバーへリクエストを送って価格を更新します。高速化プラグインで JavaScript の結合・遅延読み込み・実行の遅延を有効にしていると、このスクリプトが正しく読み込まれず、選んでも何も起きない状態になることがあります。
ブラウザの開発者ツールを開き、コンソールにエラーが出ていないか、通貨を選んだときにネットワークタブへ admin-ajax.php などへのリクエストが発生しているかを確認してください。エラーがあれば、WCML と WooCommerce 関連のスクリプトを最適化の対象から除外します。
競合の特定方法
原因が見当たらない場合は、テーマを標準テーマ(Twenty Twenty-Five など)に切り替え、WooCommerce・WPML・WCML 以外のプラグインを停止した状態で再現するかを確認します。本番サイトで訪問者に影響を出したくない場合は、「Health Check & Troubleshooting」プラグインのトラブルシューティングモードを使うと、自分のセッションだけでテーマ変更やプラグイン停止を試せます。
直ったかどうかの確認手順
設定を変えたら、次の順で確認すると見落としが減ります。
- キャッシュ(プラグイン・サーバー・CDN)をすべて削除する
- シークレットウィンドウで商品ページを開き、通貨を切り替えて価格が変わるか見る
- その通貨のまま商品をカートに入れ、カート・決済画面で通貨が保持されているか見る
- 言語を切り替え、通貨の扱いが意図どおりかを確認する
- 決済サービスのテストモードで注文を通し、注文の通貨が正しく記録されているか確認する
注文画面に記録される通貨が正しければ、表示だけでなく決済まで通っていると判断できます。
まとめ
- WPML と WooCommerce の通貨切替は、WCML のマルチ通貨モード、通貨と為替レート、言語ごとの通貨設定の3点をまず確認する
- ログアウト状態でだけ切り替わらないならページキャッシュを疑い、カートや決済ページの除外と、通貨ごとのキャッシュ分けを行う
- 決済画面で通貨が戻るときは、決済方法が対象通貨に対応しているかを確認する
- 別の通貨切替プラグインやテーマの通貨機能、JavaScript の最適化設定との競合も切り分けの対象にする
- 設定変更の前にはバックアップを取り、テストモードの注文で最終確認する