web-dev-qa-db-ja.com

WPMLで翻訳したときにカスタム投稿タイプに関連付けられたIDを取得しますか?

カスタム投稿タイプ(roomtype)を作成しました。現在、これらの部屋タイプの投稿IDは272(スウェーデン語のシングルルーム)および350(スウェーデン語のダブルルーム)私は(WPMLで)翻訳可能にしました英語で作成されました。私が異なる言語(英語)で新しい部屋タイプを作成するとき、それらは他のidを取得します:405(シングルルーム)と470(ダブルルーム)のように

私はdbでいくつかのことをチェックしたいのですが、私は例えばsingle roomのようにroomtype-idと比較します。

このようなもの:

//Check single room (both languages)
if ( $roomtype_id == 272 || $roomtype == 405 ) {
    //do action
}

//Check double room (both languages)
if ( $roomtype-id = 350 || $roomtype_id == 470 ) {
    //do action
}

ルームタイプのカスタムタイプに関連付けられたIDを言語とは無関係に取得するにはどうすればよいですか。

更新: 誰かが似たような問題にぶつかった場合/ issue:

私はapply_filters( 'wpml_object_id'、$ form_data ['roomtype_id']、 'bookitall_roomtypes'、false、 'sv')を使いました。取得して保存するためにスウェーデン語でroomtypeのIDを取得するには:-)そのようにして、私は異なる言語間の比較をする必要は全くありませんでした。

私は分類法を使用することができましたが、実際には管理者を混乱させるようになりました。多くの場合、これは素晴らしいことですが、この場合は違います。 WPMLは私が予想していた場所の分類の翻訳を表示していませんでした(たぶんそれは私のコーディングについてでした、私はより深く掘り下げませんでした)。しかし助けてくれてありがとう!

あなたの助けと選択肢を与えてくれてありがとう!

注:私はあなたの質問に対する完全な答えをしているのではなく、WPMLベースのプロジェクトに役立つかもしれないいくつかの断片を与えようとしています。

私はこの機能を使用しました:

function get_the_translated_ID($id){
   if (!class_exists('sitepress')
    return $id;

  global $sitepress;
  $type=get_post_type($id);
  return icl_object_id( $id, $type, false, $sitepress->get_default_language());
}

これにより、たとえば、翻訳ではなく元の投稿のcustom_meta値を検索できます。

ループの例:

$color = get_post_meta( get_the_translated_ID(get_the_ID() ), 'room_color',true);

もう1つの便利な方法は、1つの言語で投稿を更新するときに、すべての翻訳でカスタムメタ(言語から独立していると見なされる必要があるもの)を更新することです。

function bulk_CF_update($post_id){
  if (!class_exists('sitepress')
    return;

  $thisPost=get_post($post_id);
  $allmeta=get_post_meta($post_id); // grab all custom meta fields of the post
  $toUnset = array("CF_1","CF_2","CF_3"); // exclude the CF you want to keep 'per-language'
  foreach($toUnset as $unset)
    unset($allmeta[$unset]);

  if($thisPost->post_type=="roomtype"){ // do it only for one or more specific cpt
    $trid = $sitepress->get_element_trid($thisPost->ID,'post_roomtype'); //note the prefix 'post_' has to be added to your cpt slug
    $translations = $sitepress->get_element_translations($trid);
    foreach($translations as $translation){
      foreach($allmeta as $meta=>$val){
        if(count($val)==1) //we're only managing single values
        update_post_meta($translation->element_id, $meta, $val[0]);
      }
    }
  }
}
add_action( 'save_post', 'bulk_CF_update',10,1);

それが役立つことを願っています

3
Andrea Somovigo