WordPress では、すべての翻訳ファイルは WordPress の統合的な言語ディレクトリ (/wp-content/languages/themes/、/wp-content/languages/plugins/ ) を優先的に参照し、そこに対象言語の翻訳ファイルがなければテーマやプラグインの言語ディレクトリ (/languages/) の翻訳ファイルをロードさせます。
この場合に使用していたものが load_theme_textdomain()
や load_plugin_textdomain()
というメソッドでしたが、 先日リリースされた WordPress 6.7 からテーマやプラグインの翻訳ファイル (*.mo) の参照先の優先度、翻訳処理の仕様が変更され、これらのメソッドが実質的に機能しなくなりました。
load_theme_textdomain( 'YOURTEXTDOMAIN', get_template_directory() . '/languages' );
WordPress 6.7 以降も従来通りテーマやプラグインの言語ディレクトリの翻訳ファイルを読み込ませるには、load_textdomain()
メソッドを利用しますが、しばらくは以下のようにバージョンチェックをはさんで分岐したコードに置き換えて対応しておく必要があります。
function my_after_setup_theme() {
global $wp_version;
if ( version_compare( $wp_version, '6.7', '<' ) ) {
load_theme_textdomain( 'YOURTEXTDOMAIN', get_template_directory() . '/languages' );
} else {
load_textdomain( 'YOURTEXTDOMAIN', get_template_directory() . '/languages/' . determine_locale() . '.mo' );
}
}
add_action( 'after_setup_theme', 'my_after_setup_theme' );
'YOURTEXTDOMAIN'
は対象テーマやプラグインのテキストドメインに変更し、function.php にでもこのコードを追加しておくと、WordPress 6.6 以下では従来の load_theme_textdomain()
メソッドを利用し、WordPress 6.7以降では load_textdomain()
を利用して翻訳ファイルがロードされます。
determine_locale()
は参照元の端末のロケールを返す関数で、determine_locale() . '.mo'
は日本語の場合は「ja.mo」という文字列に変換されます。