web-dev-qa-db-ja.com

[Plugin WPML]:WPML APIを使って投稿の翻訳を作成するにはどうすればいいですか?

内部WPML API(inc/wpml-api.php)を使用して投稿の翻訳を作成する方法を見つけようとしています

投稿ID xxの翻訳を作成し、コンテンツを設定して公開したいだけです。

私はwpml_add_translatable_contentで遊ぼうとしましたが、正しくできませんでした。残念ながら、これに関するドキュメントはあまりありません。私が見つけた最も近い見込み客は このスレッド ですが、私は必要なコードに減らすことはできませんでした。 WPMLの テーブル構造 に従って、データベースに直接書き込むことによってこれを行うことも可能ですが、私はAPIを使いたいのです。

任意の提案は大歓迎です。

6
mike23

私は今のところ仕事をする機能を思い付きました:

/**
 * 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;

}
6
mike23