顧客サイトを国際化するために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さん、ありがとうございます。
ギヨーム
あなたはそのようにあなたのループ引数に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') );
}
}
}