[WordPress] WPML 多國語言外掛整合導覽標記(麵包屑)外掛的雷

說到導覽標記(麵包屑)很多人都會使用這款「Breadcrumb NavXT」,而前一篇「[WordPress] WPML 進階系統內容字串翻譯的方法 – Breadcrumb NavXT 為例」也有提到怎麼處理翻譯「首頁」這項目的問題。

但因為這款導覽標記外掛本身並無支援 WPML 這款的多國語言架構,所以碰到整合問題大概是避不掉。

這次的問題是:導覽標記路徑連結正確,但顯示標題的語言錯誤。在中文版本沒問題(次要語系),但切換成英文時就發現客製化內容類型的標題還是顯示成中文,但路徑正確!

而這種問題就需要去追查兩邊外掛怎麼實作,依照經驗先檢查簡單的(懶人原則XD)導覽標記外掛,發現只是單純的呼叫 get_the_title() 方法來取得標題,所以可能是 WPML 那邊判斷語系輸出對應標題的方法有問題。

外掛撰寫有透過內建方法就會有 hook hack 的修正方式,如下:

function mxp_wpml_get_the_title_fix($title, $id){
        $type = get_post_type($id);
        $oid = icl_object_id($id, $type, false, ICL_LANGUAGE_CODE );
        $post = get_post( $oid );
        $otitle = isset( $post->post_title ) ? $post->post_title : '';
        return $otitle==""?$title:$otitle;
}
add_filter('the_title', 'mxp_wpml_get_the_title_fix', 999, 2);

接上 the_title 的 hook 後,透過呼叫 WPML 內建方法 icl_object_id 來取得對應正確語系的文章編號,然後取出正確語系的標題來輸出修正~

看起來小小一段,也是要花不少時間找到最佳解法勒!還有就是千萬不要在這方法內再呼叫 get_the_title() 來便宜行事取標題,這會造成無窮迴圈資源耗盡、網站掛點哦!


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *