plugins – [Complemento WPML]: ¿Cómo crear una traducción de una publicación usando la API de WPML?

Pregunta:

Estoy tratando de averiguar cómo crear una traducción para una publicación usando la API interna de WPML ( inc/wpml-api.php )

Simplemente quiero crear una traducción para el ID de publicación xx, configurar algo de contenido y publicarlo.

Intenté jugar con wpml_add_translatable_content pero no pude hacerlo bien. Desafortunadamente, no hay mucha documentación disponible para esto. La pista más cercana que encontré es este hilo , pero no pude reducir el código a lo que necesito. También es posible hacer esto escribiendo directamente en la base de datos, siguiendo la estructura de la tabla de WPML, pero quiero usar la API.

Cualquier sugerencia es bienvenida.

Respuesta:

Se me ocurrió una función que hace el trabajo por ahora:

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

}

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top

web tasarım