如何使用Polylang在博客页面上显示与所选语言对应的帖子

时间:2018-03-27 作者:guillaume

我使用Polylang(免费)将客户站点国际化。我设置了默认语言(=FR),在导航栏中添加了一个语言切换器(FR和US标志),并为这两种语言设置了首页和博客页面。

1) 语言切换器可以很好地处理页面。如果你转到主页(http://cecile-chancerel-bijoux.com/wp/), 您拥有默认的FR主页。当您单击美国国旗时,它会将您重定向到美国主页。

2) 博客页面(显示帖子列表)也是如此。我有两个不同的网址为FR和美国博客。您可以使用语言切换器标志在它们之间切换:

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

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

问题是,它们都显示FR和美国邮政。显然,我已经为这两篇文章设置了语言。查看此处的屏幕截图:http://res.cloudinary.com/dbhsa0hgf/image/upload/v1522144114/blog_issue_with_polylang_x7ev8p.png

我希望美国博客(/blog en)只显示英文帖子,FR博客(/blog)只显示法语帖子。我怎样才能做到这一点?

EDIT :

我使用Themify的优雅主题,因此我修改了这个文件:wp admin/wp\\u content/themes/Themify优雅/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 个回复
最合适的回答,由SO网友: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\',
) );
However this is not the better practice 因为通过这样做,我们覆盖了对wp不友好的主查询。我们最好使用pre\\u get\\u post操作挂钩来实现这一点,所以在您的函数中。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\') );
        }
    }   
}

结束

相关推荐