Polylang 是一個簡潔好用的 WordPress 多語言插件,后臺設(shè)置選項非常簡潔,使用流程也非常流暢,對于初次接觸 Polylang 的開發(fā)者來說,Polylang 上手可能會有點困難,會遇到一些問題,下面是我們總結(jié)的使用 Polylang 開發(fā)多語言 WordPress 站點過程中遇到的一些常見問題,發(fā)布出來供大家參考。
怎么判斷當前主題的語言?
WordPress 為主題和插件開發(fā)者提供了兩個功能來判斷主題的當前語言:
- get_locale(), 以 en_US 的格式返回當前的語言代碼
- get_bloginfo(‘language’),以 en-US 的格式返回當前的語言名稱
注意,兩個函數(shù)返回的結(jié)果不同的地方在于‘_’ 和 ‘-‘,關(guān)于這兩個返回值的不同,可以參考下面的兩個論壇話題。
Return the current language as variable for your template
How to translate/switch specific contents on templates
另外,Polylang提供了pll_current_language函數(shù),可以返回以上兩種不同的格式。
怎么在主題或插件中添加用戶可以翻譯的字符串?
你需要在儀表盤使用 pll_register_string 注冊需要翻譯的字符串,然后在前臺使用 pll__ 或 pll_e調(diào)用。
注冊需要翻譯的字符串:
pll_register_string('name', 'String to translate');
顯示字符串:
pll_e('String to translate');
怎么翻譯自定義文章類型和自定義分類法?
Polylang 內(nèi)置了自定義文章類型和自定義分類法的支持,只需要使用 ’init’ 動作注冊他們就可以了。
注冊自定義文章類型和分類法后,在 Polylang 設(shè)置處,啟用對自定義文章類型和自定義分類法的支持就可以了。另外,你還可以使用 ‘pll_get_post_types’ 或 ‘pll_get_taxonomies’ 過濾器進行更多控制。
怎么在不同的語言中添加內(nèi)容而不是只在當前語言中?
Polylang 基于 WordPress 主查詢設(shè)置了語言信息,但是可以在不同的語言中添加相同的信息,例如:你可以在英文頁面列出最新的5篇法語文章。只需要在自定義查詢頁面添加一個 ‘lang’ 參數(shù)就可以了。
$posts = get_posts(array(
'post_type' => 'post',
'lang' => 'fr', // 在查詢中使用語言別名
'showposts' => 5
));
‘lang’ 參數(shù)不僅能在文章中使用,也可以在分類和評論中使用,只需要在使用 ‘get_terms’ 和 ‘get_comments’ 把 ‘lang’ 傳遞進去就可以了。
可以查詢多語言內(nèi)容嗎?
是的,當然可以,比如:
$posts = get_posts(array(
'post_type' => 'post',
'lang' => 'de,fr', // 查詢德語和法語的文章
'showposts' => 5
));
可以查詢所有語言的內(nèi)容嗎?
是的,也是可以的,比如:
$posts = get_posts(array(
'post_type' => 'post',
'lang' => '', // 查詢所有語言的文章
'showposts' => 5
));
怎么在循環(huán)中顯示指向文章翻譯的鏈接?
示例:
<?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)中設(shè)置“l(fā)ang”參數(shù)(使用語言代碼)。
Polylang在什么時候加載語言?
有兩種情況:
- 在內(nèi)容中設(shè)置了語言(默認):Polylang 需要延緩語言加載,然后在一個掛載到‘wp’的權(quán)重為5鉤子的函數(shù)中加載。
- 語言代碼添加到了所有urls:沒有必要延緩語言加載,就像Polylang沒有啟用一樣。
第一種情況中,插件作者不應(yīng)該在 ‘wp’ 動作執(zhí)行前翻譯字符串。Polylang 提供了一個新的在語言定義之后馬上執(zhí)行的 Action ‘pll_language_defined’(不管用戶怎么設(shè)置語言,都可以正常執(zhí)行)


今天遇到了一個情況,用的betheme – coaching主題,因為不想在url中加入奇怪的目錄名,于是就選擇了“語言根據(jù)內(nèi)容來設(shè)置”,而選擇結(jié)局就是主題的字符串不能正常翻譯了,有些不翻譯,有些翻譯了不顯示。。。搞不懂。只有切換到“語言根據(jù)鏈接的目錄名來設(shè)置”,才正常翻譯,而鏈接中加入來en。。讓我不能忍。。。。