私はTwentyFifteenテーマのための子テーマを作りたいのですが、それは翻訳を含む多くのことをカスタマイズします。私が自分の言語(Farsi)でWordPressをインストールするとき、それはwp-content/languages/themes
にTwentyFifteen言語ファイルを含みます
そのため、子テーマにlanguages
フォルダーを作成し、それにカスタマイズされた言語ファイルを追加し、子テーマのfunctions.php
にload_theme_textdomain( 'twentyfifteen', get_stylesheet_directory() . '/languages' )
を追加すると、カスタマイズされた言語ファイルは読み込まれず、代わりにwp-content/languages/themes
のファイルが読み込まれます。それらのファイルを上書きするために私は何ができますか?
WP 4.6以降load_theme_textdomain()
(したがってload_child_theme_textdomain()
)は、WPのオンライン翻訳プラットフォーム(translate.wordpress.org)からダウンロードされた.moファイルを優先します。テキストコードがlanguages /ディレクトリにある場合、新しいコードのため( ここでは769行目 )、これらの関数はローカルの.moファイルを完全に無視します。
ただし、もっと基本的なload_textdomain()
関数を使って直接.moファイルをロードし、元のドメインの文字列を上書きすることができます。
$domain = 'textdomain-to-override';
$path = get_stylesheet_directory() . '/languages/'; // adjust to the location of your .mo file
$locale = apply_filters( 'theme_locale', get_locale(), $domain );
load_textdomain( $domain, $path . $locale . '.mo' );
これは ソースからのload_textdomain
の引用です(WP 4.6):
テキストドメインがすでに存在する場合、翻訳はマージされます。両方のセットに同じ文字列がある場合は、元の値からの変換が行われます。
言い換えれば、あなたの翻訳がTwentyFifteenのものを上書きするようにするために、あなたはあなたのmo-ファイルが最初にロードされることを確実にしなければなりません。これを行うには、子テーマのfunctions.php
が親テーマの前にロードされるという事実を使用できます。
親テーマでテキストドメインを読み込んでいる関数を見つけます。おそらくafter_setup_theme
フックを使っています。あなたの子供のテーマが親と同じテキストドメインを使用していることを確認してください。次に、同じフックの load_child_theme_textdomain
を使用してテキストドメインをロードしますが、 より高い優先度 を使用します。