我正在为一个网站开发属性提要导入程序,但在使分类法正确同步时遇到了一些问题。
这是添加翻译的代码
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);
}
}