web-dev-qa-db-ja.com

switch_to_blog():テキストドメインを読み込む

WordPressのマルチサイト機能を Multilingual Press Pro と組み合わせて使用​​して、リンクされた投稿を持つ多言語サイトを作成します。

ネットワーク起動プラグインでは、カスタム投稿タイプが登録されています。スラグを翻訳するために、私はl10nを使います:

'rewrite'   => array(
        'slug' => __( 'products', 'text-domain' ) . '/%product-category%',
        'with_front' => false
        )

これはうまくいきます。しかし、ネットワーク内の別のサイトの翻訳された記事にリンクするには、switch_to_blog()が使用されます。この関数内ではプラグインは(再)ロードされていないので、私の翻訳ファイルもロードされていないので、私が取得したパーマリンクは間違っているでしょう。

他のテキストドメインをロードするためにswitch_to_blog()にフックする可能性はありますか?

ありがとうございます。

5
luke

あなたはアクション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 );

これはずっと速いです。パーマリンクと言語ファイル処理はまだマルチサイトで壊れています、あなたは妥協して生きなければなりません。

6
fuxia