Cambiar la dirección de un sitio WordPress

Es frecuente que por las razones que sean, no sólo de producción en plan: “quiero cambiar de dominio” sino por pruebas para poder echar a andar un proyecto WordPress en un servidor que no está en producción, tengamos que cambiar la dirección del mismo.
La propia arquitectura de WordPress está pensada para ser flexible en este aspecto. En este artículo, comentaremos cómo hacerlo desde el punto de vista técnico, no entraremos en cuestiones aparte como informar a los buscadores sobre el cambio de URL, básico para evitar pérdida de posicionamiento.
Transporte de datos
Lo primero que debemos hacer es asegurarnos de que el contenido PHP, JavaScript, imágenes, etc. esté accesible desde el nuevo dominio. Si cambiamos de servidor debería copiarlo usando FTP, SCP o la opción que más os guste.
Base de datos
Este es el punto más interesante. ¿Por qué? A priori, en muchos manuales leeremos que sólo hay que cambiar en la tabla de opciones, wp_options, los siguiente valores:
- siteurl: dirección donde está instalado WordPress, suele coincidir con la de abajo
- home: inicio del blog
Sin embargo hay detalles que se escapan: la tabla wp_post con las entradas y wp_options, van a estar llenas de referencias al dominio antiguo.
Bueno, la primera solución que se nos ocurriría, sería o montar una consulta o un script para que trate estos datos y haga una actualización del dominio antiguo al nuevo, o tirar por el camino del dump, el reemplazo masivo en el fichero SQL y la posterior importación. Sin embargo, no es tan fácil.
Las tablas en WordPress tienen un diseño que imposibilita hacer relaciones 1:N cuando no las hay. Me explico. Soy el plugin tal y quiero almacenar datos referentes a mí en un total de 10 instancias. Podría:
- Hacer una tabla para mí y con una clave foránea referirme a la opciones de WordPress: no es posible, se sale del estándar
- Meter tantas opciones como necesite en wp_options: no es elegante y a la hora de hacer consultas, no es la vía más fácil si mis opciones pueden crecer de forma desmesurada. Si son siempre las mismas es una buena opción.
- Meter una sola fila en wp_options con todo usando la serialización de PHP: es la opción elegida cuando no se puede usar la anterior
Antes de entrar a hablar de la serialización en PHP os recuerdo que si cambiáis de servidor, deberéis:
- Migrar los datos MySQL haciendo un dump y luego importándolos
- Modificar los parámetros de wp-config.php referentes a la base de datos y referentes a: siteurl, home y situación del contenido si es que los habéis cambiado en dicho fichero
¿Qué hace la serialización en PHP?
La idea de serialize() es obtener una cadena con la información de varios valores que puede ser prácticamente cualquier cosa y tener además la herramienta contraria, unserialize(). La idea es similar a JSON pero tiene sus pros y contras (ya hablaremos otro día de ello con más tiempo).
El problema de usar serialize() es que resulta imposible hacer un reemplazo directamente, porque la cadena que genera es sensible como podéis imaginar a su tamaño y a una serie de tokens que incorpora internamente.
La solución: usar esta herramienta de David Covene llamada Search and replace for WordPress Databases. Deberemos instalarla en nuestro servidor y ejecutarla. Sólo deberemos decir sobre qué tablas queremos hacer la operación de búsqueda y reemplazo y qué cadenas queremos reemplazar (en nuestro caso serán http://dominio_antiguo por http://dominio_nuevo).
Y con esto estaría terminada la modificación de dirección o dominio de nuestro blog.