テーマの多くは通常IDに基づいて特別の投稿文、ページ、カテゴリーを表示します。 ホームページの「特集」部分の投稿文やハイライトされたカテゴリーなどがその例です。
これらのIDはテーマのPHPにハードコード化されたり、またはユーザーがテーマの設定画面で選ぶなどのケースがあります。
正しく表示するためにはテーマは言語毎にIDを選ぶ必要があります。 WPMLでは言語が変わると投稿文、ページ、カテゴリー、タグのIDが変わります。そのためテーマは有効な言語のために正しいIDを使う必要があります。
WPMLは以下を実施するAPI機能を装備しています。
icl_object_id(ID, type, return_original_if_missing)
- ID – 投稿文、ページ、タグ、カテゴリーのID
- タイプ - 「投稿文」または、「ページ」または、「タグ」または、「カテゴリー」
- return_original_if_missing – 正 WPMLは翻訳が無ければ、元の言語要素のIDを戻すべきです、または誤 WPMLは翻訳が無ければ、空値をリターンするべきです。
IDの引数は言語におけるオブジェクトのIDです。 この機能はオブジェクトを探すために翻訳グループを調べ、次に有効言語において対応するオブジェクトのIDを調べます。
使用例
icl_object_id(3, 'category', false)
カテゴリー3の翻訳であるカテゴリーのIDを戻します。ない場合、空値を戻します。
テーマでの使用法
あなたがWPMLで使うテーマを書いているが、WPMLなしでも正しく作動して欲しい場合、これらの呼び出しは function_exists() 呼び出しにより取り囲むべきです。 例として、この機能をあなたの functions.php ファイル内に作ることができます。
function lang_category_id($id){ if(function_exists('icl_object_id')) { return icl_object_id($id,'category',true); } else { return $id; } }
この機能は(もし存在すれば)翻訳カテゴリーのIDを戻し、または(翻訳が無ければ)元のカテゴリーのIDを戻します。 WPMLがインストールされていなければ、常に元のカテゴリーのID が戻されます。
IDの配列を訳す
多くの場合、オブジェクトID(最も頻繁にはカテゴリーID)の全配列を変換する必要があります。 これを行うためには以下の機能を使用する必要があります。
function lang_object_ids($ids_array, $type) { if(function_exists('icl_object_id')) { $res = array(); foreach ($ids_array as $id) { $xlat = icl_object_id($id,$type,false); if(!is_null($xlat)) $res[] = $xlat; } return $res; } else { return $ids_array; } }
この機能はまたオブジェクトタイプを引数として受け入れます。
例えば、カテゴリ-1、3、6のためにカテゴリーIDの配列を得るためには、以下を呼び出します。
lang_object_ids(array(1,3,6),'category')