web-dev-qa-db-ja.com

Polylangを使用して、選択した言語に対応する投稿をブログページに表示する方法

顧客サイトを国際化するためにPolylang(無料)を使用します。デフォルトの言語(= FR)を設定し、ナビゲーションバー(FRとUSのフラグ)に言語スイッチャーを追加し、両方の言語に対してFrontページとBlogページを設定しました。

1)言語スイッチャーはページでうまく機能します。ホームページ( http://cecile-chancerel-bijoux.com/wp/ )にアクセスすると、デフォルトのFRホームページが表示されます。米国の国旗をクリックすると、米国のホームページにリダイレクトされます。

2)ブログページ(投稿リストの表示)についても同様です。 FRとUSのブログには2つの異なるURLがあります。あなたはlangage switcherフラグでそれらを切り替えることができます:

FR: http://cecile-chancerel-bijoux.com/wp/blog/

米国: http://cecile-chancerel-bijoux.com/wp/blog-en/

問題は、両方FRとUSの投稿が表示されることです。明らかに私はすでにこれら2つの記事の言語を設定しています。ここでスクリーンショットをチェックしてください: http://res.cloudinary.com/dbhsa0hgf/image/upload/v1522144114/blog_issue_with_polylang_x7ev8p.png

米国のブログ(/ blog-en)に英語の投稿のみを表示し、FRのブログ(/ blog)にフランス語の投稿のみを表示するようにします。どうすればこれを達成できますか?

編集:

私はThemifyのElegantテーマを使用しているので、このファイルを修正しました:wp-admin/wp_content/themes/themify-elegant/index.php:

次のブロックを更新しました。

<?php// Loop?>
<?php if (have_posts()) : ?>
  <div id="loops-wrapper">
    <?php while (have_posts()) : the_post(); ?>
      <?php if(is_search()): ?>
       // some logic //
      <?php endif; ?>
    <?php endwhile; ?>
  </div>
<?php else : ?>
  <p><?php _e( 'Sorry, nothing found.', 'themify' ); ?></p>
<?php endif; ?>

カスタムクエリで

<?php// Loop?>
  <?php $args = array(
    'post_type'      => 'post',
    'lang'           => pll_current_language('slug'),
    'posts_per_page' => 10,
    'post_status'    => 'publish',
  );?>
  <?php $query = new WP_Query( $args );?>

  <?php if ($query->have_posts()) : ?>
    <div id="loops-wrapper">
      <?php while ($query->have_posts()) : $query->the_post(); ?>
        <?php if(is_search()): ?>
         // some logic //
        <?php endif; ?>
      <?php endwhile; ?>
    </div>
  <?php else : ?>
    <p><?php _e( 'Sorry, nothing found.', 'themify' ); ?></p>
  <?php endif; ?>

そしてそれはうまくいきます!私は最終的に私のフランス語のブログページに表示されるフランス語の記事だけを持っています。英語の記事と同じです。 @Frissさん、ありがとうございます。

ギヨーム

1
guillaume

あなたはそのようにあなたのループ引数にlangパラメータを追加することができます

$loop = new WP_Query( array (
        'post_type'      => 'post',
        'lang'           => pll_current_language('slug'), //returns 'en' for example    
        'posts_per_page' => 10,
        'post_status'    => 'publish',
) );

しかしながら、これはより良い習慣ではありません そのようにすることによって、私たちはwpにやさしくないメインクエリをオーバーライドするので。私たちはpre_get_postアクションフックを使ってこのようにするべきです、それであなたのfunctions.phpファイルで:

if(function_exists('pll_current_language')) // if polylang
{
    add_action( 'pre_get_posts', 'include_language' );
    function include_language( $query ) 
    {
        if ( $query->is_main_query() ) { //add more condition here if needed
            $query->set( 'lang', pll_current_language('slug') );
        }
    }   
}
2
Friss