使用Polylang时如何确定WordPress页面的当前语言?

52

我正在寻找一个变量,可以输出Polylang插件当前使用的语言。类似于:

if($curlang == "en") {
  ...
}

fixed grammar; paragraphs - user585968
7个回答

102
我们可以使用get_locale函数:
if (get_locale() == 'en_GB') {
    // drink tea
}

26

要显示当前语言,您可以使用:

 <?php echo $lang=get_bloginfo("language"); ?>

简单明了


6
这样不会给出相对的当前用户语言环境吗?如果我的用户管理员设置为英语,而网站是德语,前端加载的任何与ajax相关的内容(如日历)都将是英语。为了获取所有情况下的绝对语言环境,我使用get_option('WPLANG')。 - Jonas Lundman
1
如果在 AJAX 调用中全局 wp_locale 的语言与管理员用户和前端不同,则会出现奇怪的情况。get_option('WPLANG') 和 get_bloginfo('language') 返回不同的值。 - cavameta

25

pll_current_language

返回当前语言。

用法:

pll_current_language( $value ); 
  • $value => (optional) 选择name, locale, 或者slug中的一个,如果不选则默认为slug

返回当前语言的完整名称,或者 WordPress 的语言代码(与 WordPress 核心函数 'get_locale' 相同),或者是当前语言的两个字母的缩写代码。


8
你如何从不同的插件访问此功能?我收到了“调用未定义函数pll_current_language()”的错误。 - coding-dude.com
4
@coding-dude.com 你不能这样做。这是Polylang的一个功能。 - Ares

17

简单:

if(pll_current_language() == 'en'){
   //do your work here
}

11

这个插件的文档在https://polylang.wordpress.com/documentation中记录得相当不错。

切换文章语言

开发者文档说明以下逻辑作为生成同一篇文章不同翻译 URL 的方法。

<?php while ( have_posts() ) : the_post(); ?>
<ul class='translations'><?php pll_the_languages(array('post_id' =>; $post->ID)); ?></ul>
<?php the_content(); ?>
<?php endwhile; ?>

如果您想对渲染内容有更多的影响,请检查pll_the_languages函数,并将其行为复制到您自己的输出实现中。

切换网站语言

由于您希望有按钮来切换语言,因此此页面:https://polylang.wordpress.com/documentation/frequently-asked-questions/the-language-switcher/将为您提供所需的信息。

一个实现示例:

<ul><?php pll_the_languages();?></ul>

使用CSS进行样式设计,创造出按钮、标志或者任何你想要的东西。 此外还可以使用插件提供的小部件来实现。

获取当前语言

所有插件函数都在这里解释:https://polylang.wordpress.com/documentation/documentation-for-developers/functions-reference/

在这种情况下,请使用:

pll_current_language();

谢谢您的回复。我认为这不完全是我要找的。每个页面的标题上都有一个按钮。我想要两个链接,一个是德语版本,另一个是英语版本的网站。 - Felix TheCat
已更新答案。请参考开发者提供的文档。如果此答案与文档结合起来还不够,请进一步完善你的问题。 - mvbrakel
我已经翻译了按钮标题,但是关键是它背后的href链接。 - Felix TheCat
实际上,我只需要在 PHP 中一个变量来告诉我当前显示的语言,然后我可以使用 if 语句输出其中一个链接。 - Felix TheCat
抱歉,我认为我必须撤回我的答案。我现在完全不清楚问题是什么。上面代码生成的链接将切换网站的语言。我的先前答案切换了帖子的语言。 - mvbrakel
更新了答案。我这个版本帮到你了吗? :) - mvbrakel

10

我使用类似这样的东西:

<?php 

$lang = get_bloginfo("language"); 

if ($lang == 'fr-FR') : ?>

   <p>Bienvenue!</p>

<?php endif; ?>

1
<?php
                    $currentpage = $_SERVER['REQUEST_URI'];
                    $eep=explode('/',$currentpage);
                    $ln=$eep[1];
                    if (in_array("en", $eep))
                    {
                        $lan='en';
                    }
                    if (in_array("es", $eep))
                    {
                        $lan='es';
                    }
                ?>

实际上,这是我尝试从自己编写的自定义插件中获取当前语言时唯一有效的解决方案。所有其他解决方案都返回了默认的WordPress语言。我猜测插件在WordPress确定当前语言之前被加载。 - jnaklaas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接