web-dev-qa-db-ja.com

サイドバーウィジェットのタイトルはすべての言語で表示されます - qtranslate付き

だからここに私のコードは、qTranslateプラグインを使用しています:

    query_posts(array('post_type' => 'uk_blog', 'numberposts' => 2));
    $i = 0; while(have_posts()): the_post($post);?>
    <div class="third-column"<?php if ($i == 1) echo ' style="margin-right:0;"';?>>
        <h2><a href="<?php get_permalink($post->ID);?>"><?php the_title();?></a></h2>
        <div class="inner">
            <?php $length = strlen(get_the_content());
            echo nl2br(substr(strip_tags(get_the_content()), 0, 500));
            if ($length > 500){
                echo '...<br /><a href="' . get_permalink($post->ID) . '">Read more</a>';
            }
            ?>
        </div>
    </div>
    <?php $i++; endwhile;?>

投稿のタイトル(the_title()を使用)は、実際には同時にすべての言語で表示されます。つまり、英語のタイトルフランス語タイトルスペイン語のタイトルです。

HTMLソースを表示すると、文字列のどのビットがどの言語に対応しているかを定義するqTranslateタグが直接出力されていることがわかります。 HTMLソースはIE

<!--:en-->English title<!--:--><!--:fr-->French title<!--:-->

投稿はカスタム投稿タイプからのものです。

なぜこれがあるかもしれないという考えはありますか?

読んでくれてありがとう!

4
Will

こんにちはまたこれを試してみます:

これをあなたのfunctions.phpに加えてください

function get_qTrans_TitleText($text) {
  $language=qtrans_getLanguage();
  preg_match('/<!--:'.$language.'-->(.*?)<!--:-->/', $text, $matches);
  return strip_tags($matches[0]);
}

その後:

<?php echo get_qTrans_TitleText($text); ?>

QTranslateとWPのどのバージョンがあるのか​​わからないので、正しいタイトルを取得するには__()を、それをエコーするには_e()を使用することもできます。

3
Daniel Sachs

私はqTranslateでこのような問題を経験しました。最初にすべきことは、Daniel Sachsが示唆しているように、the_title()またはthe_titleフィルターを確実に使用することです。

あなたのウィジェットは既にthe_title()を呼び出しているので、それは明らかにそうではありません。いくつかの場面で(特にWordPressやqTranslateの更新中に)私はそれらが正しく表示されるように投稿を編集しなければなりませんでした。影響を受ける投稿を編集し、タブを切り替えて、タイトルを削除してそれぞれのフィールドに再挿入してみてください。奇妙なことに、それは私にとってこのような問題を解決しました。

2
Simon

使ってみる

<h2>
    <a href="<?php get_permalink($post->ID);?>">
        <?php echo apply_filters('the_title', $post->post_title); ?>
    </a>
</h2>
1
Daniel Sachs