En uno de mis proyectos necesitaba programáticamente duplicar las traducciones para famoso plugin wpml
Que es Wpml?
En su foro oficial hay varias partes de solución con enlaces a otras webs etc.
Pero ninguno de ellos no ha cumplido mis necesidades. Resulta que lo he creado en base de los de mas y colocare aquí la solucion
//imaginamos que post en ingles ya esta publicado y es la lengua por defecto, si por defecto es otra hacer cambios function get_post_data_by_lang($lang){ //cojemos datos depende de valor de idioma $lng if ($lang == 'es'){ //aqui sacamos datos de alguna manera, para ejemplo lo pondre directamente como texto $postarray['post_title'] = 'Titulo en castellano'; $postarray['post_content'] = 'Contenido en castellano'; $postarray['post_excerpt'] = 'Descripción corta en castellano'; }elseif ($lang == 'ru') { $postarray['post_title'] = 'Titulo en ruso'; $postarray['post_content'] = 'Contenido en ruso'; $postarray['post_excerpt'] = 'Descripción corta en ruso'; } return $postarray; //devolvemos resultado final depende de idioma elejida } echo 'Post id is: '.$post_id.' '; $langs_to_duplicate=['es','ru']; //idiomas foreach ($langs_to_duplicate as $lang) { $tr_post_id = $sitepress->make_duplicate( $post_id, $lang ); //duplicamos post de idioma ingles echo 'Duplicated post ID: '.$tr_post_id.' for Lang is: '.$lang.' '; $postarray = get_post_data_by_lang($lang); //dentro de función asigno valores depende de idioma $postarray['ID'] = $tr_post_id; $postarray['post_author'] = 1; if (wp_update_post($postarray, true)){ //renovamos post adecuado echo 'Updated post ID: '.$tr_post_id.' Lang is: '.$lang.' '; } } //esta peticion nos permita desactivar la sincronizacion de TODOS traduciones que se activa por defecto cuando duplicas post $wpdb->query("delete from wp_postmeta where meta_key = '_icl_lang_duplicate_of';");
OJO con copiar y pegar! la ultima usa wp_postmeta