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