- ステータス
- 解決済み
- 報告対象
- WPML String Translation 2.4.2
- 解決されたバージョン
- WPML String Translation 2.4.2.1
問題の概要
WPML 3.5.3環境でWPML Multilingual & Multicurrency for WooCommerce 3.8.6を使用している場合、セカンダリ言語で注文を行った後、注文確認ページにエラーが表示(またはログに記録)されます。
エラーメッセージは以下のようになります。
PHP Notice: Undefined index: order-received in ../wp-content/plugins/woocommerce-multilingual/inc/class-wcml-endpoints.php on line 155
エラーメッセージに加えて、注文の詳細が記載された「注文完了」ページの代わりに、コンテンツが何もない翻訳された「チェックアウト」ページがユーザーに表示されます。

注文自体は処理され、通知メールも送信されますが、クライアントが混乱し、注文が完了しなかったと考えて重複して注文を送信する可能性があります。
これがWPML 文字列翻訳 2.4.2の変更に起因することが判明しました。修正はすでに進行中ですが、アップデートをリリースする前に十分にテストする必要があります。
回避策
この問題を解決する1つの方法は、WPML文字列翻訳のベータ版2.4.2.1-b1を使用することです。これは特定のこの問題のみに対処するものであり、他の機能に影響を与えることはありません。ただし、ベータ版であるため注意が必要です。サイトのバックアップを作成し、できれば最初に本番環境以外の環境でテストすることをお勧めします。
また、一時的に使用でき、ユーザーエクスペリエンスにそれほど影響を与えない別の回避策もあります。この回避策では、「order-received」エンドポイントに対応する文字列を翻訳しないように設定します。文字列を削除する必要はなく、「翻訳が完了しました」チェックボックスのチェックを外すだけです。デフォルト言語が英語の場合の手順は以下のとおりです。サイトで別のデフォルト言語を使用している場合でも、手順は同じです。
- WPML -> 文字列翻訳に移動します
- 「order-received」を検索するか、「WooCommerce Endpoints」ドメインに移動して「order-received」文字列を見つけます。
- 「order-received」文字列の「翻訳」セクションを展開します
- 「翻訳が完了しました」チェックボックスのチェックを外し、すべての言語で「保存」をクリックします

この後も、「Order Received」ページは引き続き翻訳されます。URL内のエンドポイント文字列が翻訳されなくなるだけです。