以编程方式 Wordpress / WPML 同步分类法

时间:2021-04-21 14:49:08

标签: wordpress wpml

我正在为一个网站开发属性提要导入程序,但在使分类法正确同步时遇到了一些问题。

这是添加翻译的代码

  foreach($languages as $lang => $data){
    $translation = 0;
    $trans_arr = array(
      'post_author'=>$author,
      'post_content'=>$property->get_description($lang),
      'post_title'=>$property->get_title($lang),
      'post_status'=>'importing', //Don't show the property while its still importing
      'post_type'=>'property',
      'comment_status'=>'closed',
      'ping_status'=>'closed',
      'post_date'=>$property->date, //Use the property date to keep track of changes
      'meta_input'=>array("kyero_data"=>json_encode(array('feed' => $feed_token,"kyeor_id" => $property->ref, "lang"=>$lang ))),
    );
    
    // Check if the translation already exists so we update it instead
    $_translation = icl_object_id( $post, 'property', false, $lang );
    if($_translation){
      $trans_arr['ID'] = $_translation;
    }
    
    // Create/update the translation
    $translation = wp_insert_post($trans_arr);

    // If successfull set the correct language information of the post.
    if(is_int($translation) && $translation !== 0){
      wp_set_post_terms( $translation, $tax['property_feature'], 'property_feature', false );
      wp_set_post_terms( $translation, $tax['property_status'], 'property_status', false );
      $sitepress->set_element_language_details($translation, 'post_property', $def_trid, $lang);
      set_post_thumbnail($translation, $feat);
      wp_publish_post($translation);
    }
  }

$languages 是一个包含除默认语言之外的所有语言(键是语言代码)的数组。

$tax['property_feature']$tax['property_status'] 包含由供稿填充的 ID 列表,并且仅以供稿中的默认语言提供(ID 由 get_term_by 使用名称获取)但是它们在网站上进行了翻译。

请有人帮助我,有没有办法以编程方式将单个 WP_Post 对象的分类与其父对象同步


我找到了一个解决方案并教我在这里提到它,以防其他人在某个时候可能需要它。

而不是使用 wpml 类对象来设置语言 $sitepress->set_element_language_details 使用钩子 wpml_set_element_language_details

  foreach($languages as $lang => $data){
    $translation = 0;
    $trans_arr = array(
      'post_author'=>$author,
      'post_content'=>$property->get_description($lang),
      'post_title'=>$property->get_title($lang),
      'post_status'=>'importing', //Don't show the property while its still importing
      'post_type'=>'property',
      'comment_status'=>'closed',
      'ping_status'=>'closed',
      'post_date'=>$property->date, //Use the property date to keep track of changes
      'meta_input'=>array("kyero_data"=>json_encode(array('feed' => $feed_token,"kyeor_id" => $property->ref, "lang"=>$lang ))),
    );
    
    // Check if the translation already exists so we update it instead
    $_translation = icl_object_id( $post, 'property', false, $lang );
    if($_translation){
      $trans_arr['ID'] = $_translation;
    }
    
    // Create/update the translation
    $translation = wp_insert_post($trans_arr);

    // If successfull set the correct language information of the post.
    if(is_int($translation) && $translation !== 0){
      do_action('wpml_set_element_language_details',array('element_id'=>$translation, 'element_type'=>'post_property', 'trid'=>$def_trid, 'language_code'=>$lang, 'source_language_code'=>$default_lang));
      set_post_thumbnail($translation, $feat);
      wp_publish_post($translation);
    }
  }

0 个答案:

没有答案