web-dev-qa-db-fra.com

[Plugin WPML]: Comment créer une traduction d'un article en utilisant l'API WPML?

J'essaie de comprendre comment créer une traduction pour une publication à l'aide de l'API WPML interne (inc/wpml-api.php).

Je veux simplement créer une traduction pour le post ID xx, définir du contenu et le publier.

J'ai essayé de jouer avec wpml_add_translatable_content mais je n'ai pas bien compris. Malheureusement, il n’ya pas beaucoup de documentation disponible pour cela. La piste la plus proche que j'ai trouvée est ce fil , mais je ne pouvais pas réduire le code à ce dont j'avais besoin. Il est également possible de le faire en écrivant directement dans la base de données, en suivant la structure de table de WPML, mais je souhaite utiliser l'API.

Toutes les suggestions sont les bienvenues.

6
mike23

Je suis venu avec une fonction qui fait le travail pour l'instant:

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