站点图标 WordPress智库

WordPress 多语言插件 Polylang 常见问题

Polylang 是一个简洁好用的 WordPress 多语言插件,后台设置选项非常简洁,使用流程也非常流畅,对于初次接触 Polylang 的开发者来说,Polylang 上手可能会有点困难,会遇到一些问题,下面是我们总结的使用 Polylang 开发多语言 WordPress 站点过程中遇到的一些常见问题,发布出来供大家参考。

怎么判断当前主题的语言?

WordPress 为主题和插件开发者提供了两个功能来判断主题的当前语言:

注意,两个函数返回的结果不同的地方在于‘_’ 和 ‘-‘,关于这两个返回值的不同,可以参考下面的两个论坛话题。

Return the current language as variable for your template
How to translate/switch specific contents on templates

另外,Polylang提供了pll_current_language函数,可以返回以上两种不同的格式。

怎么在主题或插件中添加用户可以翻译的字符串?

你需要在仪表盘使用 pll_register_string 注册需要翻译的字符串,然后在前台使用 pll__pll_e调用。

注册需要翻译的字符串:

pll_register_string('name', 'String to translate');

显示字符串:

pll_e('String to translate');

怎么翻译自定义文章类型和自定义分类法?

Polylang 内置了自定义文章类型和自定义分类法的支持,只需要使用 ’init’ 动作注册他们就可以了。

注册自定义文章类型和分类法后,在 Polylang 设置处,启用对自定义文章类型和自定义分类法的支持就可以了。另外,你还可以使用 ‘pll_get_post_types’ 或 ‘pll_get_taxonomies’ 过滤器进行更多控制。

怎么在不同的语言中添加内容而不是只在当前语言中?

Polylang 基于 WordPress 主查询设置了语言信息,但是可以在不同的语言中添加相同的信息,例如:你可以在英文页面列出最新的5篇法语文章。只需要在自定义查询页面添加一个 ‘lang’ 参数就可以了。

$posts = get_posts(array(
    'post_type' => 'post',
    'lang' => 'fr', // 在查询中使用语言别名
    'showposts' => 5
));

‘lang’ 参数不仅能在文章中使用,也可以在分类和评论中使用,只需要在使用 ‘get_terms’ 和 ‘get_comments’ 把 ‘lang’ 传递进去就可以了。

可以查询多语言内容吗?

是的,当然可以,比如:

$posts = get_posts(array(
    'post_type' => 'post',
    'lang' => 'de,fr', // 查询德语和法语的文章
    'showposts' => 5
));

可以查询所有语言的内容吗?

是的,也是可以的,比如:

$posts = get_posts(array(
    'post_type' => 'post',
    'lang' => '', // 查询所有语言的文章
    'showposts' => 5
));

怎么在循环中显示指向文章翻译的链接?

示例:

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

怎么在前端ajax请求中加载Polylang API?

Polylang 可以在前端自动检测到 AJAX 请求,然后加载当前语言。你可以在请求(POST或GET)中设置“lang”参数(使用语言代码)。

Polylang在什么时候加载语言?

有两种情况:

  1. 在内容中设置了语言(默认):Polylang 需要延缓语言加载,然后在一个挂载到‘wp’的权重为5钩子的函数中加载。
  2. 语言代码添加到了所有urls:没有必要延缓语言加载,就像Polylang没有启用一样。

第一种情况中,插件作者不应该在 ‘wp’ 动作执行前翻译字符串。Polylang 提供了一个新的在语言定义之后马上执行的 Action ‘pll_language_defined’(不管用户怎么设置语言,都可以正常执行)

退出移动版