Polylang 是一个简洁好用的 WordPress 多语言插件,后台设置选项非常简洁,使用流程也非常流畅,对于初次接触 Polylang 的开发者来说,Polylang 上手可能会有点困难,会遇到一些问题,下面是我们总结的使用 Polylang 开发多语言 WordPress 站点过程中遇到的一些常见问题,发布出来供大家参考。
怎么判断当前主题的语言?
WordPress 为主题和插件开发者提供了两个功能来判断主题的当前语言:
- get_locale(), 以 en_US 的格式返回当前的语言代码
- get_bloginfo(‘language’),以 en-US 的格式返回当前的语言名称
注意,两个函数返回的结果不同的地方在于‘_’ 和 ‘-‘,关于这两个返回值的不同,可以参考下面的两个论坛话题。
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在什么时候加载语言?
有两种情况:
- 在内容中设置了语言(默认):Polylang 需要延缓语言加载,然后在一个挂载到‘wp’的权重为5钩子的函数中加载。
- 语言代码添加到了所有urls:没有必要延缓语言加载,就像Polylang没有启用一样。
第一种情况中,插件作者不应该在 ‘wp’ 动作执行前翻译字符串。Polylang 提供了一个新的在语言定义之后马上执行的 Action ‘pll_language_defined’(不管用户怎么设置语言,都可以正常执行)
29 thoughts on “WordPress 多语言插件 Polylang 常见问题”
今天遇到了一个情况,用的betheme – coaching主题,因为不想在url中加入奇怪的目录名,于是就选择了“语言根据内容来设置”,而选择结局就是主题的字符串不能正常翻译了,有些不翻译,有些翻译了不显示。。。搞不懂。只有切换到“语言根据链接的目录名来设置”,才正常翻译,而链接中加入来en。。让我不能忍。。。。
我用了polylang,等于说脚本footer也要做多份对吗,但是我不知道不同语言的footer在哪里做可以在相应语言下显示
不用的,footer 里面的字符串在 .po 文件中翻译,具体方法搜索“WordPress主题 国际化”
我想请教个问题,我给博客页面添加了侧边栏,侧边栏里的category点进去的文章排版都只有标题很丑,我要在哪里设置sidebar里的文章排版?
外观是 CSS 控制的,直接通过 CSS 调整样式就可以了。
也就是说要改代码,而不是通过一些系统设置就能实现对吗?
是的,如果原来的主题里面没有侧边栏的样式效果,就需要通过添加 CSS 来实现。
如果要改代码,我应该在哪个文件里改呢?
直接在主题的 style.css 里面添加样式即可。
请问fusion-secondary-header要在哪里才能删除呢?
请教:Impossible to add the language. 是什么问题,我在本地测试站点中可以用,但是在线上站点添加语言的时候无法添加。
我在本地和线上都测试了这个插件,发现一个灾难性的问题,启用了这个插件后,首页会有文章列表显示的,但是点开一篇文章却是空白。尤其是安装后,再在后台发布的文章,全部都打不开,但是其实发表成功了。打不开的效果是主题还在,显示还未有发表文章。这样的效果。
可能是你使用的主题和这个插件有冲突吧,可以把 WP_DEBUG 打开,看看有没有什么错误。
请问添加了小语种后,自定义菜单该怎么处理,我现在多语种页面的是制作了各个语种的头部文件,修改页面模板调用不同的头部文件。但是WooCommerce的产品页面就没法这样搞了,
可以使用
pll_current_language
函数,判断当前显示的语言,然后显示对应的菜单。写死到页面中的字符串也可以使用这种方法判断。想請教 我使用了polylang 文章卻沒有翻譯
問題出在哪呢
没有进一步的信息没办法判断,可以加我的 QQ 进一步说明问题。
不好意請問一下
上面有提到「怎么在不同的语言中添加内容而不是只在当前语言中?」
這個功能是抓其他語言的文章顯示在當前語言,
但我只要抓該文章其他語言的標題該怎麼寫呢?
謝謝!!!
$posts->post_title
是文章的标题。请问我的wordpress,post文章DE语点击作者跳转是404页面是怎么回事,是我哪里没有设置吗?
在设置里面重新保存一下固定连接试试,有可能是重定向规则缓存没有刷新。
polylang里面的设置吗?好想没有用,我把所有的设置都保存过很多次,但是依然DE语post作者的文章列表是404,我用的是免费版本,是需要升级付费版本吗?
应该不是免费版本的问题,免费版本可以正常使用的。这个插件我们现在不用了,不知道是什么情况。我们现在用的是 MultilingualPress,管理上更方便一些。
您好,怎么在不同的语言中添加内容而不是只在当前语言中? 这个标题下提到的
我想让网站中的几个指定页面同时存在于中文和英文语言环境下,这个函数应该加到哪里呢
去掉「’lang’ => ‘fr’」试试。
我用了多语言插件 Polylang ,但在wordpress的面板里all pages 看不到我的网页。
设置中文为缺省语言,但添加的网页开始是英文,我改为中文,然后update view,都好,但在面板上找不到我的网页。
http://www.liwensoft.com/view3d 还可以访问,但没法修改,也没法删除。
添加页面如果是先英文,就好。
感谢帮助解决了燃眉之急,信誉保证!
您好:看了你的文章受到了很多啟發。我正在製作一個POLYLANG支持下的多語言網站。但是苦於在不同語言版本下,只能搜索當前文章內容。這使得讀者在使用上有諸多不便。我看到您的文章涉及到改善這部分內容,甚至可以在當前搜索下,搜索所有語言的內容。但是我是一個編程白癡,我完全不知道您給出的那串代碼應該寫入哪裡?可否得到您的幫助?謝謝
是可以实现的,网址发我邮箱,帮你调试一下?