目次
- エラーの概要
- エラーが発生する原因
- 解決方法(2つの対処法)
- よくある質問(FAQ)
エラーの概要
WordPress 6.7にアップデートした後、次のようなエラーメッセージがサイト上部に表示される事例が報告されています:
Notice: 関数 _load_textdomain_just_in_time が誤って呼び出されました。neve ドメインの翻訳の読み込みが早すぎました。
これは通常、プラグインまたはテーマの一部のコードが早すぎるタイミングで実行されていることを示しています。
翻訳は init アクション以降で読み込む必要があります。
このエラーは、WordPress 6.7で導入された新しい機能の問題のようで、こんな感じのエラーが出てしまうと下記のwordpressフォーラムを見るとまだ最近も議論されています。(2024/11/19)
wordpressフォーラム
デバッグモードをfalseに変えたら上部に表示エラーが表示されなくなりました。
解決方法
方法1:デバッグモードの無効化
最も簡単な対処方法として、デバッグモードを無効にすることで、エラーメッセージの表示を抑制できます。
wp-config.phpファイルを開きます
# grep -n “‘WP_DEBUG'” /usr/share/nginx/wordpress/wp-config.php
57:define( ‘WP_DEBUG’, true );
- 以下の行を探します:
define( 'WP_DEBUG', true );
- 次のように変更します:
define( 'WP_DEBUG', false );
方法2:プラグインの無効化と切り分け
エラーの根本的な原因を特定する場合は、以下の手順を試してください:
- すべてのプラグインを一時的に無効化
- テーマをWordPressデフォルトテーマに切り替え
- 問題が解消されるか確認
- プラグインを1つずつ有効化して、問題の原因となるプラグインを特定
よくある質問(FAQ)
Q: デバッグモードを無効にしても根本的な解決にならないのでは?
A: その通りです。エラーメッセージは表示されなくなりますが、翻訳の読み込みに関する問題自体は残ります。完全な解決を望む場合は、プラグインの無効化による切り分けをお勧めします。
Q: このエラーは性能に影響しますか?
A: 翻訳機能の読み込みタイミングに関する警告であり、サイトの基本的な機能には影響しません。ただし、多言語サイトの場合は、翻訳が正しく表示されない可能性があります。
まとめ
WordPress 6.7での翻訳関連エラーは、現在開発者コミュニティで活発に議論されている問題です。一時的な対処としてデバッグモードの無効化が有効ですが、根本的な解決のためにはプラグインの互換性確認が必要となります。今後のWordPressアップデートやプラグインのアップデートで解決される可能性が高いため、継続的な更新確認をお勧めします。
質問の際に使ったchatGPTのリンクもここに張っておきます!
https://chatgpt.com/share/673c4f07-52a0-8008-ba5a-c63a5132e99a
なぜこのエラーが出るのか(原因の仕組み)
英語環境では、このエラーは次の形で表示されます。
Notice: Function _load_textdomain_just_in_time was called incorrectly.
Translation loading for the <domain> domain was triggered too early.
This is usually an indicator for some code in the plugin or theme
running too early. Translations should be loaded at the init action or later.
原因はWordPress 6.7で翻訳の読み込みタイミングが厳格化されたことです。従来は、翻訳関数が呼ばれた時点で必要な翻訳ファイルが自動的に読み込まれていました(これが「just in time」=必要になった瞬間に読み込む、という名前の由来です)。
6.7以降は、この自動読み込みが init アクションより前に発生すると警告を出すようになりました。つまりあなたのサイトが壊れたのではなく、プラグインやテーマの実装が新しいルールに追いついていないという状態です。
重要:これは Notice(警告)であり、サイトの動作を止めるエラーではありません。ただし表示されたままにするのは望ましくないため、原因を特定して根本から直すのが正攻法です。デバッグ表示を切るのは「警告を隠す」だけで、問題そのものは残ります。
原因のプラグイン・テーマを特定する
エラーメッセージには ドメイン名 が含まれています。ここが最大のヒントです。
手順1:ドメイン名から犯人を絞る
「neve ドメインの翻訳の読み込みが早すぎました」と出ていれば、原因は neve というテキストドメインを使っている拡張、つまりテーマ Neve です。ドメイン名はプラグイン・テーマのスラッグと一致していることがほとんどなので、これだけで大半は特定できます。
手順2:特定できない場合はスタックトレースを出す
ドメイン名だけで判断がつかないときは、wp-config.php に以下を書いてログを取ります。画面には出さず、ファイルにだけ記録する設定です。
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
wp-content/debug.log に記録されるので、該当行の前後にあるファイルパスを見れば、どの拡張のどのファイルが早すぎるタイミングで呼んでいるか分かります。
根本的な直し方
| 状況 | 対処 |
|---|---|
| 市販・公開プラグイン/テーマが原因 | まず最新版に更新する。多くはWordPress 6.7対応の修正が済んでいる。未対応なら作者へ報告し、対応版を待つ |
| 自作コード・カスタマイズが原因 | 翻訳関数の呼び出しを init 以降に移す(下記) |
| どうしても直せない | 暫定的に画面表示だけ止める。ただし根本解決ではないので記録に残しておく |
自作コードの場合の直し方
ファイル読み込み時点で翻訳関数を呼んでいるのが典型的な原因です。
// NG: ファイル読み込み時点で __() を呼んでいる
$label = __( 'Settings', 'my-plugin' );
// OK: init 以降に遅らせる
add_action( 'init', function () {
$label = __( 'Settings', 'my-plugin' );
} );
クラスのプロパティ初期化やコンストラクタで翻訳文字列を代入している場合も同じ理由で発生します。翻訳が必要な文字列は「使う直前」に生成すると考えると整理しやすくなります。
補足:WordPress.org で配布されているプラグイン・テーマは、4.6以降 load_plugin_textdomain() を自分で呼ぶ必要がなくなっています。古い記事を参考にして残っている呼び出しが、かえって警告の原因になっていることもあります。