本篇文章更新時間:2020/01/12
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
說到導覽標記(麵包屑)很多人都會使用這款「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()
來便宜行事取標題,這會造成無窮迴圈資源耗盡、網站掛點哦!