WordPressのマルチサイト機能を Multilingual Press Pro と組み合わせて使用して、リンクされた投稿を持つ多言語サイトを作成します。
ネットワーク起動プラグインでは、カスタム投稿タイプが登録されています。スラグを翻訳するために、私はl10nを使います:
'rewrite' => array(
'slug' => __( 'products', 'text-domain' ) . '/%product-category%',
'with_front' => false
)
これはうまくいきます。しかし、ネットワーク内の別のサイトの翻訳された記事にリンクするには、switch_to_blog()
が使用されます。この関数内ではプラグインは(再)ロードされていないので、私の翻訳ファイルもロードされていないので、私が取得したパーマリンクは間違っているでしょう。
他のテキストドメインをロードするためにswitch_to_blog()
にフックする可能性はありますか?
ありがとうございます。
あなたはアクションswitch_blog
にフックすることができます。ここで最初の引数として新しいブログIDを取得します。しかし、ここに完全な翻訳ファイルをロードするのは費用がかかります。その後、古いファイルを復元する必要があります。
WordPressはネイティブのgettext関数を使っていませんが、もっと遅いカスタムコードを使っています。 #17268 を参照してください。そのためのパフォーマンス上のペナルティは非常に大きくなります。
代わりにプラグインからURLをフィルタリングします。この場合はmlp_linked_element_link
で、次のようなハードコードされた置換リストを使用してください。
add_filter( 'mlp_linked_element_link', function( $url, $site_id ) {
if ( 1 === (int) $site_id )
return str_replace( '/produkt/', '/product/', $url );
if ( 2 === (int) $site_id )
return str_replace( '/product/', '/produkt/', $url );
return $url;
}, 10, 2 );
これはずっと速いです。パーマリンクと言語ファイル処理はまだマルチサイトで壊れています、あなたは妥協して生きなければなりません。