Cita: Por cierto, yo me hubiera evitado lo del ID original como custom field, haciendo que sea el ID del post en WP. La ultima vez hice los INSERTs al wp_posts a mano (saltandome el api) para que quedaran :P Digo, si es que son numéricos.
Bueno, finalmente me decidí por una mezcla: Hice uso del API con wp_insert_post() y add_post_meta() (para no escribir tanto código), pero luego tocó hacer una serie de UPDATES (también con el API):
- a wp_posts para modificar el valor del ID (de ID generado por WP a ID de origen)
- a wp_postmeta para asociar los custom fields a este ID de origen
- a wp_term_relationships para asociar los tags y las categorías a este ID de origen
El código que usé es éste:
Código PHP:
Ver original// me conecto a la "tabla fuente"
$datos = $wpdb->get_results("SELECT * FROM noticias LIMIT 0, 1000");
foreach ($datos as $dato) {
// previamente creé las categorías en WordPress. lógicamente no tienen los mismos ID's, así que tocó hacer una "traducción"de ellos
// if's concatenados usando una hoja de cálculo de excel... sé que era mejor un switch, pero esto fue más rápido :)
if($dato->ID_LINK == 1) {$nuevo_id_cat = 3;}
if($dato->ID_LINK == 38) {$nuevo_id_cat = 4;}
if($dato->ID_LINK == 2) {$nuevo_id_cat = 5;}
if($dato->ID_LINK == 3) {$nuevo_id_cat = 6;}
if($dato->ID_LINK == 4) {$nuevo_id_cat = 7;}
if($dato->ID_LINK == 5) {$nuevo_id_cat = 8;}
if($dato->ID_LINK == 47) {$nuevo_id_cat = 9;}
if($dato->ID_LINK == 43) {$nuevo_id_cat = 10;}
if($dato->ID_LINK == 59) {$nuevo_id_cat = 11;}
if($dato->ID_LINK == 7) {$nuevo_id_cat = 12;}
if($dato->ID_LINK == 6) {$nuevo_id_cat = 13;}
if($dato->ID_LINK == 49) {$nuevo_id_cat = 14;}
if($dato->ID_LINK == 50) {$nuevo_id_cat = 15;}
if($dato->ID_LINK == 56) {$nuevo_id_cat = 16;}
if($dato->ID_LINK == 61) {$nuevo_id_cat = 17;}
if($dato->ID_LINK == 24) {$nuevo_id_cat = 18;}
if($dato->ID_LINK == 8) {$nuevo_id_cat = 19;}
if($dato->ID_LINK == 34) {$nuevo_id_cat = 20;}
if($dato->ID_LINK == 35) {$nuevo_id_cat = 21;}
if($dato->ID_LINK == 9) {$nuevo_id_cat = 22;}
if($dato->ID_LINK == 10) {$nuevo_id_cat = 23;}
if($dato->ID_LINK == 11) {$nuevo_id_cat = 24;}
if($dato->ID_LINK == 13) {$nuevo_id_cat = 25;}
if($dato->ID_LINK == 26) {$nuevo_id_cat = 26;}
if($dato->ID_LINK == 14) {$nuevo_id_cat = 27;}
if($dato->ID_LINK == 46) {$nuevo_id_cat = 28;}
if($dato->ID_LINK == 15) {$nuevo_id_cat = 29;}
if($dato->ID_LINK == 25) {$nuevo_id_cat = 30;}
if($dato->ID_LINK == 60) {$nuevo_id_cat = 31;}
if($dato->ID_LINK == 54) {$nuevo_id_cat = 32;}
if($dato->ID_LINK == 21) {$nuevo_id_cat = 33;}
if($dato->ID_LINK == 22) {$nuevo_id_cat = 34;}
if($dato->ID_LINK == 18) {$nuevo_id_cat = 35;}
if($dato->ID_LINK == 17) {$nuevo_id_cat = 36;}
if($dato->ID_LINK == 19) {$nuevo_id_cat = 37;}
if($dato->ID_LINK == 23) {$nuevo_id_cat = 38;}
if($dato->ID_LINK == 52) {$nuevo_id_cat = 39;}
if($dato->ID_LINK == 44) {$nuevo_id_cat = 40;}
if($dato->ID_LINK == 53) {$nuevo_id_cat = 41;}
if($dato->ID_LINK == 20) {$nuevo_id_cat = 42;}
//defino los datos a guardar en el post
// 'ID' => [ <post id> ] //Are you updating an existing post?
// 'menu_order' => [ <order> ] //If new post is a page, sets the order should it appear in the tabs.
'comment_status' => 'closed', // 'closed' means no comments.
'ping_status' => 'closed', // 'closed' means pingbacks or trackbacks turned off
'pinged' => '', //?
'post_author' => 1, //The user ID number of the author.
'post_category' => array($nuevo_id_cat), //Add some categories. 'post_content' => trim($dato->NOTICIA), //The full text of the post. 'post_date' => trim($dato->FECHA),//[ Y-m-d H:i:s ] //The time post was made. 'post_date_gmt' => trim($dato->FECHA), //[ Y-m-d H:i:s ] //The time post was made, in GMT. 'post_excerpt' => trim($dato->COPETE), //For all your post excerpt needs. 'post_name' => trim($dato->TITULO), // The name (slug) for your post 'post_parent' => 0, //Sets the parent of the new post.
'post_password' => '', //password for post?
'post_status' => 'publish', //[ 'draft' | 'publish' | 'pending'| 'future' | 'private' ] //Set the status of the new post.
'post_title' => trim($dato->TITULO), //The title of your post. 'post_type' => 'post', //[ 'post' | 'page' | 'link' | 'nav_menu_item' | custom post type ] //You may want to insert a regular post, page, link, a menu item or some custom post type
'tags_input' => trim($dato->CIUDAD), //For tags. 'to_ping' => '', //?
);
//tomo el id del registro original
$idOriginal = $dato->ID_NOTICIAS;
//inserto el contenido del post obteniendo el id generador por WP
$new_post_id = wp_insert_post( $post );
//ELIMINAR DE VERSION DEFINITIVA: genero un custom field con el id original
add_post_meta($new_post_id, 'id_noticias', $dato->ID_NOTICIAS);
//ELIMINAR DE VERSION DEFINITIVA: genero un custom field con el dato de la ciudad
if(trim($dato->CIUDAD) !== ''){ add_post_meta
($new_post_id, 'ciudad', trim($dato->CIUDAD)); }
//DECIDIR QUE HAGO CON ESTO EN VERSION DEFINITIVA: genero un custom field con el dato de la firma
if(trim($dato->FIRMA) !== ''){ add_post_meta
($new_post_id, 'firma', trim($dato->FIRMA)); }
//DECIDIR QUE HAGO CON ESTO EN VERSION DEFINITIVA: genero un custom field con el dato de la fuente
if(trim($dato->FUENTE) !== ''){ add_post_meta
($new_post_id, 'fuente', trim($dato->FUENTE)); }
//DECIDIR QUE HAGO CON ESTO EN VERSION DEFINITIVA: genero un custom field con el dato de la foto
if(trim($dato->FOTO) !== ''){ add_post_meta($new_post_id, 'foto_original', $dato->FOTO);
}
//actualizo el ID del post recién insertado con el ID original
$wpdb->update( 'wp_posts', array( 'ID' => $idOriginal), array( 'ID' => $new_post_id ), $format = null, $where_format = null ); //actualizo los custom field antes insertados para asociarlos al ID original
$wpdb->update( 'wp_postmeta', array( 'post_id' => $idOriginal), array( 'post_id' => $new_post_id ), $format = null, $where_format = null ); //actualizo los tags y las categorías que tenga el post recién insertado para asociarlos al ID original
$wpdb->update( 'wp_term_relationships', array( 'object_id' => $idOriginal), array( 'object_id' => $new_post_id ), $format = null, $where_format = null );
} //foreach
Así como está... Le ves algo que haya omitido,
Javier? (por ejemplo hacer un update a alguna tabla que no me haya percatado).
Gracias!