這篇文章說明如何使用WPML新增多語言分類,第一次使用時,你可能會有一點不習慣,看完這篇你就能理解所有操作了。
1. 新增第一個分類:以關於我們為例
因為加裝了WPML,你會發現原本的新增分類按鈕上面會多了一個語言選單、在分類列表上面也可以快速切換你設定的其他語系。

2. 點擊剛剛新增的分類:關於我們
再一次編輯剛剛的關於我們分類,你可以在描述的下面看到語言區塊,你可以點擊添加你要編輯的語言,這裡我們以英文為例
3. 新增語言的翻譯
接著就會跳轉至英文的分類新增的介面,網址上面也會看到如下的網址
wp-admin/edit-tags.php?taxonomy=category&trid=19&lang=en&source_lang=zh-hant&post_type=post
以及頂端的多語言選單也切換至英語,如下圖
剛剛的分類列表也會自動切換到英語,如下圖
接著回到左邊的畫面,依舊是跟先前新增的分類一樣的欄位
但重點是下面的語言區塊:會指示你現在在翻譯哪一個分類,與你現在翻譯的語言是什麼,
這裡要非常注意,有時候WPML可能會異常跳掉,你可以手動選取回去
本例就是翻譯:關於我們的英語版,在這裡我們會建議代稱(即顯示網址),
可以保持原有的基底語言命名
4. 手動修正分類Slug: 移除語言代碼
由於預設的WordPress是不允許有同名的Slug,因為會自動幫你加上語言代碼(英語=en):
如下
about-us-<語言代碼>
about-us-en
你可以使用快速編輯,移除掉語言代碼: -en
補充:第二種新增語言分類的方法
你可以直接從英文語系的介面直接新增關於我們的翻譯,預設的語言區塊,是不會自動幫你關連(因為這樣沒有關連的依舊,要手動選取,因為網址上面也沒有重要的關連網址參數-trid),
如下圖
這裡有一個重點,假設你沒有正確關連的話,又選擇想要命名同名的網址,
WordPress核心會自動幫你補上語言代碼與避免衝突的版本參數,
因為對系統來說你在建立不同的分類,所以就會套用預設的規則
如下所示
about-us-en-2 (遇到已存在的版本會自動加類似版本號的數字)
使用WPML的分類翻譯功能
WPML也有提供一個列表式+彈窗翻譯的外掛(比較不用切來切去)
點擊要翻譯的英文語系+,會彈出術語翻譯的視窗。
請注意這裡的別名如果有自動補上語言代碼: -en ,你只要手動移除再儲存即可,就會一次動作。
為什麼「手動移掉 -langcode」後可以並存?
1) WordPress 的唯一性規則其實是「同 taxonomy + 同父層」才檢查
- WordPress 在建立/更新 term 時會跑
wp_unique_term_slug()
,避免同一個 taxonomy、同一個父分類下出現重複的 slug。 - 對「階層式 taxonomy」(如 category、product_cat),如果兩個 term 不同父層(Parent 不同),就可以有同名 slug。
- 但即使同父層,通常也會被阻擋(自動加尾碼)。
2) WPML 會把多語的每個翻譯存成「不同的 term」,但它知道它們互為翻譯
- 翻譯語言是一顆「不同的 term」,WPML 用內部
trid
把它們關聯起來。 - 建立當下:WP 核心只看到「同一 taxonomy 有相同 slug」→ 為了安全,WPML/核心會先補
-ja
、-zh-hant
之類尾碼,避免撞名。 - 你後來手動改 slug(在 WPML 的「分類翻譯」介面輸入與主語言相同的字)時:
- WPML 會以「翻譯中的同組 term」為語境處理,並在某些路徑上略過或覆寫那個保護性尾碼(沒有資料庫層級的唯一索引,只有程式檢查),所以能成功把
about-ja
改回about
。 - 前台網址仍然不會衝突,因為路徑前有語言資料夾(/en/、/zh-hant/、/ja/),WPML 也會依語言解析到正確的 term。
- WPML 會以「翻譯中的同組 term」為語境處理,並在某些路徑上略過或覆寫那個保護性尾碼(沒有資料庫層級的唯一索引,只有程式檢查),所以能成功把
簡單說:建立時保守防撞 → 事後在「翻譯語境」下,WPML 允許你改回一致的 slug。
快速解法:安裝虎鯨orca-admin外掛
目前虎鯨管理後台orca-admin外掛於1.0.33版本已可以自動處理自動同步基底語言