1

バイリンガル (英語/フランス語) の Web サイトを持っています。

私は、翻訳オプションに「何もしない」という値を持つカスタム投稿タイプとカスタム分類法を持っています。

サイトの英語版とフランス語版の両方でコンテンツが利用できることを期待していましたが、そうではありません. コンテンツは常に、サイトの既定の言語バージョン内で表示されます。WPML サポートと話し、私の問題のみを確認し、「何もしない」コンテンツには常にデフォルトの言語を使用します。

?lang=frURLに追加すると、コンテンツがフランス語版のサイトに表示されることに気付きました。

私の質問は次のとおりです。

  1. URL に基づいて、コンテンツに「何もしない」という値があるかどうかを検出するにはどうすればよいですか?
  2. これらのコンテンツの URL に「?lang=fr」をオンザフライで追加するにはどうすればよいですか?
  3. サイトの速度を落とさずにこれを行うことは可能ですか?

ありがとう、

4

3 に答える 3

0

ラディスラフさん、ご提案ありがとうございます。

を使用icl_object_idするのは良い考えでしたが、問題に取り組んでいると、コンテンツに「何もしない」という値が設定されているかどうかについてあまり気にする必要がないことがわかりました。 . ドキュメントには、「テーマを多言語で機能させる」をオフにする必要があると記載されていますが、これが ThemeForest テーマであるため、これがテーマにどのように影響するかを判断するのは困難です。

WPML が翻訳する必要のないコンテンツを管理する方法に関する問題を解決できるので、真に柔軟なソリューションが必要です。

しかし、あなたの提案で、私は答えを探し続け、私の問題に対する解決策の始まりを見つけました.

まず、リンクを編集するには、編集するリンクの種類に対応する「add_filter」を設定する必要がありました。

add_filter( 'post_type_link', 'add_lang_fr', 10, 2 );
add_filter( 'term_link', 'add_lang_fr', 10, 2 );

次に、URL をテストして、?lang=fr を追加する必要があるコンテンツと一致することを確認します。

function add_lang_fr( $url, $post ) {

    if ('fr' == ICL_LANGUAGE_CODE) { // if current language is fr

        if ( 'article' == get_post_type( $post ) || FALSE !== strpos($url, 'article-tag') ) {   // if link goes to a CPT 'article' or have 'article-tag' in url

            return add_query_arg('lang', 'fr', $url); 
        } 
    }

    return ($url);

}

私の最初の質問に答えるには:

  1. URL に基づいて、コンテンツに「何もしない」という値があるかどうかを検出するにはどうすればよいですか? - 別の方法を使用して、?lang=fr を追加する必要がある URL をフィルタリングします
  2. これらのコンテンツの URL に「?lang=fr」をオンザフライで追加するにはどうすればよいですか? - add_query_argURLにクエリ引数を追加できるため、キーでした...これはまさに私が必要としていたものでした。
  3. サイトの速度を落とさずにこれを行うことは可能ですか? -このソリューションでは、150 の余分なリクエストと +16 秒の読み込みがあります (テストされたページには、編集された約 2000 の URL があります)。

呼び出し回数を減らし、ページの読み込みを改善する方法はありますか?

于 2014-04-29T15:32:11.917 に答える
0

すいません、すいません。おそらく次のようなものが必要です:

$id = icl_object_id($post->ID, 'page', false,ICL_LANGUAGE_CODE);
$page  = is_page($id);

http://wpml.org/documentation/support/creating-multilingual-wordpress-themes/language-dependent-ids/

于 2014-04-28T19:02:11.600 に答える