En los últimos años, nos hemos encontrado muchas veces con situaciones en las que las BBDD de wordpress no tenían las URLs del dominio actual del sitio. Podría tratarse de una migración mal realizadas, permalinks dañados, la web era tan grande que mi herramienta de migración gratuita saturaba el max_execution_time del servidor, o como fue el último caso que recibimos, un archivo SQL para poblar un nuevo WP que no tenía las URLs correctas y no lo detectamos hasta haberlo importado.

Hay maneras de hacer esto con las herramientas de WordPress, importar/exportar, pero si sabemos algo de SQL esto es mucho más rápido y directo.

En un hosting compartido o con cpanel

  1. Vamos a phpmyadmin, la herramienta para gestionar bases de datos MySQL que viene con todos los hostings con cpanel.
  2. Seleccionamos en el sidebar la base de datos que queremos modificar
  3. Revisamos el nombre de las tablas, los normal es que tengan un prefijo wp_ pero por seguridad, muchos hostings modifican esto
  4. }

  5. Nos dirigimos con esta información a la pestaña SQL en el menú superior de la herramienta

Aquí simplemente copiamos, modificamos y ejecutamos el siguiente código SQL



UPDATE wp_options SET option_value = replace(option_value, 'http://www.urlantigua', 'http://www.urlnueva') WHERE option_name = 'home' OR option_name = 'siteurl';

UPDATE wp_posts SET guid = replace(guid, 'http://www.urlantigua','http://www.urlnueva');

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.urlantigua', 'http://www.urlnueva');

UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.urlantigua','http://www.urlnueva');


Recordemos cambiar las tablas (wp_options, wp_posts, wp_postmeta) por las que tengamos en nuestra instalación.

Mediante ssh

Si tenemos un VPS o servidor local con conexión ssh, los comandos son los mismos, pero debemos ejecutarlos dentro del CLI de MySQL:



$ mysql -u {username de la bbdd} -p {nombre de la bbdd}
Enter password:
Reading table information for completion of table and column names
Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

mysql> UPDATE wp_options SET option_value = replace(option_value, 'http://www.urlantigua', 'http://www.urlnueva') WHERE option_name = 'home' OR option_name = 'siteurl';

Query OK, 0 rows affected (0.00 sec)
Rows matched: 2 Changed: 0 Warnings: 0

mysql> UPDATE wp_posts SET guid = replace(guid, 'http://www.urlantigua','http://www.urlnueva');
Query OK, 0 rows affected (0.01 sec)
Rows matched: 876 Changed: 0 Warnings: 0

mysql> UPDATE wp_posts SET post_content = replace(post_content, 'http://www.urlantigua', 'http://www.urlnueva');
Query OK, 0 rows affected (0.03 sec)
Rows matched: 876 Changed: 0 Warnings: 0

mysql> UPDATE wp_postmeta SET meta_value = replace(meta_value,'http://www.urlantigua','http://www.urlnueva');
Query OK, 0 rows affected (0.02 sec)
Rows matched: 534 Changed: 0 Warnings: 0

Y listo!

Recuerden que esto es solo un paso en lo que significa una migración de WordPress completa.