Estoy en situación de migrar una web que programé por mi cuenta años atrás, con mis propias tablas para almacenar información a WordPress. Si tuviese 5 o 10 entradas, la migración se podría hacer a mano sin ningún problema, pero el problema viene cuando ya tengo más de 2000 entradas. Es necesario la integración de un script que automatice esta ardua tarea.

migración

No voy a entrar en PHP, (cadenas de conexión a la base de datos, etc) sino en MySQL. Este código que pongo a continuación es un ejemplo muy básico en el que se modifica el tipo de dato de un campo, se elimina una tabla existente y se migran datos a partir de una consulta. También se reemplazan cadenas con funciones de MySQL.

<?php
 
function conectar_origen(){
    $host = "host";
    $usuario = "usuario";
    $contrasenya= "pass";
    $db = "database";
    $enlace = mysql_connect($host,$usuario,$contrasenya) or die("No pudo conectarse a la base de datos por: " . mysql_error());
    if (!$enlace) {
        die('No conectado : ' . mysql_error());
    }
    $seldb = mysql_select_db($db,$enlace);
    if (!$seldb) {
        die ('No se puede seleccionar la base de datos: ' . mysql_error());
    }
    return $enlace;
}
 
function desconectar($conexion){
    mysql_close($conexion);
}
 
function consulta($sql){
    $res = mysql_query($sql) or die ("No se pudieron obtener datos en la consulta por: ".mysql_error());
    return $res;
}
 
 
//ORIGEN DE DATOS:
$link_origen= conectar_origen();
 
//QUITAR AUTO INCREMENT DE NOTICIA.
consulta("ALTER TABLE noticia MODIFY COLUMN id_noticia smallint(6);");
 
//ELIMINAR LA TABLA ANTERIOR.
consulta("TRUNCATE TABLE noticia;");
 
//MIGRACION DE DATOS
if(consulta("INSERT INTO noticia(id_noticia, titulo, url, url_video, url_foto, descripcion, fecha, visitas, hd) SELECT id_dia_noticia, titulo, url, REPLACE(url_video, 'cadena1', 'cadena2'), REPLACE(url_foto, 'cadena1', 'cadena2'), descripcion, fecha, visitas, 'NO' FROM dia_noticia WHERE fecha >'2010-09-01';")){
	printf("NOTICIAS MIGRADAS CON EXITO\n");
}
 
//CONTINUARIA...
desconectar($link_origen);
?>

diferentes bases de datos

Puede ser que haya tablas que queramos migrar que estén en diferentes bases de datos (noticia en basededatos1 y dia_noticia en basededatos2), para ello habría que comentar el código anterior:

$seldb = mysql_select_db($db,$enlace);
if (!$seldb) {
   die ('No se puede seleccionar la base de datos: ' . mysql_error());
}

e indicar antes del nombre de cada tabla la base de datos a la que pertenece:

if(consulta("INSERT INTO basededatos1.noticia(id_noticia, titulo, url, url_video, url_foto, descripcion, fecha, visitas, hd) SELECT id_dia_noticia, titulo, url, REPLACE(url_video, 'cadena1', 'cadena2'), REPLACE(url_foto, 'cadena1', 'cadena2'), descripcion, fecha, visitas, 'NO' FROM basededatos2.dia_noticia WHERE fecha >'2010-09-01';")){
	printf("NOTICIAS MIGRADAS CON EXITO\n");
}