テーマの多くは通常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')