我想出了一个函数来完成这项工作:
/**
* Creates a translation of a post (to be used with WPML)
*
* @param int $post_id The ID of the post to be translated.
* @param string $post_type The post type of the post to be transaled (ie. \'post\', \'page\', \'custom type\', etc.).
* @param string $lang The language of the translated post (ie \'fr\', \'de\', etc.).
*
* @return the translated post ID
* */
function mwm_wpml_translate_post( $post_id, $post_type, $lang ){
// Include WPML API
include_once( WP_PLUGIN_DIR . \'/sitepress-multilingual-cms/inc/wpml-api.php\' );
// Define title of translated post
$post_translated_title = get_post( $post_id )->post_title . \' (\' . $lang . \')\';
// Insert translated post
$post_translated_id = wp_insert_post( array( \'post_title\' => $post_translated_title, \'post_type\' => $post_type ) );
// Get trid of original post
$trid = wpml_get_content_trid( \'post_\' . $post_type, $post_id );
// Get default language
$default_lang = wpml_get_default_language();
// Associate original post and translated post
global $wpdb;
$wpdb->update(
$wpdb->prefix.\'icl_translations\',
array(
\'trid\' => $trid,
\'language_code\' => $lang,
\'source_language_code\' => $default_lang
),
array(
\'element_type\' => $post_type,
\'element_id\' => $post_translated_id
)
);
// Return translated post ID
return $post_translated_id;
}