在使用WPML转换时,获取ID与自定义帖子类型关联吗?

时间:2018-08-01 作者:bestprogrammerintheworld

我已经创建了一个自定义帖子类型(roomtype)。现在,这些roomtypes的post id为272(瑞典语为单人房)和350(瑞典语为双人房)我已经使其可翻译(使用WPML)并用英语创建。当我用不同的语言(英语)创建新的房间类型时,他们会得到其他id:比如405(单人房)和470(双人房)

我想检查db中的一些内容,并与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
}

How can I fetch the ID\'s associated with roomtype custom type indepently of language?

UPDATE:如果有人遇到类似的问题:

我使用了apply\\u过滤器(\'wpml\\u object\\u id\',$form\\u data[\'roomtype\\u id\',\'bookitall\\u roomtypes\',false,\'sv\');要获取roomtype的瑞典语id以便获取和保存:-),这样我根本不需要比较不同语言。

我本可以使用分类法,但实际上这让管理员感到困惑,就像有一个roomtype,然后有一个roomtype类别,其中roomtype类别说明了它是哪个roomtype。在许多情况下,这将是伟大的,但不是在这种情况下。WPML并没有像我所期望的那样到处显示分类法的翻译(可能是关于我的编码,我没有深入挖掘)。但是谢谢你的帮助!!!

Thank you for your help and giving alternatives!!!

1 个回复
最合适的回答,由SO网友:Andrea Somovigo 整理而成

注意:我并没有给出您的问题的完整答案,但试图给出一些可能对基于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());
}
例如,这允许搜索原始帖子的自定义\\u元值,而不是翻译。

循环中的示例:

$color = get_post_meta( get_the_translated_ID(get_the_ID() ), \'room_color\',true);
另一个有用的方法是,在用一种语言更新帖子时,在所有翻译中更新一些自定义元(这些元必须被视为独立于语言):

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);
希望能有所帮助

结束