web-dev-qa-db-de.com

[Plugin WPML]: Wie erstelle ich eine Übersetzung eines Posts mit der WPML-API?

Ich versuche herauszufinden, wie eine Übersetzung für einen Beitrag mit der internen WPML-API (inc/wpml-api.php) erstellt wird.

Ich möchte einfach eine Übersetzung für die Post-ID xx erstellen, Inhalte festlegen und veröffentlichen.

Ich habe versucht, mit wpml_add_translatable_content herumzuspielen, konnte es aber nicht richtig machen. Leider ist dazu nicht viel Dokumentation vorhanden. Der nächste Hinweis, den ich gefunden habe, ist dieser Thread , aber ich konnte den Code nicht auf das reduzieren, was ich brauche. Es ist auch möglich, dies durch direktes Schreiben in die Datenbank gemäß der Tabellenstruktur von WPML zu tun, aber ich möchte die API verwenden.

Anregungen sind willkommen.

6
mike23

Ich habe mir eine Funktion ausgedacht, die vorerst funktioniert:

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