En la fase de desarrollo o bien cuando hemos heredado un proyecto en WordPress debemos de migrar la URL y cambiar en la base de datos el dominio en el que trabajamos. Es una operación sencilla en la cual simplemente debemos de cambiar una cadena de texto en una Base de Datos. Sin embargo se complica cuando almacenamos objetos serializados en PHP.
En este artículo explicaremos brevemente el problema y las distintas alternativas existentes. WordPress no es el único CMS que utiliza y almacena objetos serializados en su base de datos, por lo que algunas de las herramientas que expondremos podremos utilizarlas en otras plataformas web.
¿Qué es un objeto serializado?
Citando textualmente la Wikipedia: «La serialización es un mecanismo ampliamente usado para transportar objetos a través de una red, para hacer persistente un objeto en un archivo o base de datos, o para distribuir objetos idénticos a varias aplicaciones o localizaciones». Supongo que aunque no seáis programadores os sonará el concepto de programación orientada a objetos y como ya sabréis WordPress utiliza dicho paradigma de programación, por lo que es necesario en ocasiones almacenar dichos objetos en la BD y por este motivo se recurre a la serialización.
Trabajar con datos serializados realmente supone una gran ventaja a la hora de combinar el trabajo con Bases de Datos y Programación Orientada a Objetos. Si os interesa el tema y conocer las ventajas pormenorizadamente os recomiendo este artículo: Trabajando con datos personalizados en WordPress.
Sin embargo uno de sus inconvenientes es que complica algunas tareas como la actualización o modificación de datos directamente en la Base de Datos. Como comentábamos al principio del artículo es frecuente el siguiente escenario: cuando realizamos una migración del nombre de dominio, o realizamos la copia de una página de desarrollo a producción (o viceversa), deberemos de realizar un cambio directamente en las tablas de nuestra Base de Datos y en ocasiones no funciona exactamente como esperábamos.
Generalmente cada vez más temas y plugins almacenan la información como objetos y por ello cuando hemos realizado la migración de repente el tema muestra su configuración por defecto o algunos plugins o widgets no aparecen o no funcionan correctamente. Son los síntomas más claros de que la migración no ha funcionado al 100% por este motivo.
Herramientas para realizar sustituciones en Bases de Datos
Existen bastantes alternativas para realizar dicha tarea. Algunas de ellos son plugins bien conocidos, otras quizás no tanto y hasta alguna quizás os parezca exótica dado que permite realizar la operación en linea de comandos.
WP Migrate DB
https://wordpress.org/plugins/wp-migrate-db/
Este es uno de los plugins más conocidos en gestión de Bases de Datos en WordPress y empleado para migrar instalaciones completas. Hace bastante sencilla cualquier migración y por supuesto permite sustituir dentro de las propias tablas los datos serializados.
Sin embargo tiene un inconveniente: sus características más interesantes son de pago y por supuesto incluye la modificación en objetos serializados de cadenas entre las opciones PRO.
Search and replace for WordPress Databases
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
En búsqueda de una alternativa gratuita y sencilla encontré este desarrollo web que no es propiamente un plugin, sino que podemos instalar como un desarrollo web completo. Similar a PHPMyAdmin podemos instalar este sencillo interfaz web en un directorio de nuestro ordenador de desarrollo y tras introducirle los parámetros de conexión realizar los cambios que deseemos en los contenidos de las tablas.
Aparte de ser gratuito lo mejor es que es válido para cualquier CMS o desarrollo que utilice objetos serializados como Drupal o WordPress. Para mí es imprescindible por su sencillez de uso. Eso sí, recordad realizar una copia de seguridad previa de la Base de Datos por si algo sale mal.
Better Search Replace
https://wordpress.org/plugins/better-search-replace/
Basado en el anterior desarrollo era extraño que nadie hubiera realizado una adaptación en forma de plugin para WordPress. Finalmente lo encontré. Se trata de este plugin que entre sus características ofrece la posibilidad de la modificación en objetos serializados y de forma gratuita. Por supuesto cuanta con una versión Pro que aporta alguna funcionalidad más, pero que a mí personalmente me sobra.
Si realmente eres un amante de los plugins y sólo trabajas con WordPress esta es una de las herramientas imprescindibles.
WP-CLI Search replace
http://wp-cli.org/commands/search-replace/
Siempre hay puristas y en mi caso sigo utilizando la consola para el manejo de Bases de Datos en ocasiones. Incluso puede que nos interese en alguna ocasión automatizar procesos mediante scripts. Para ello y sino lo conocíais os recomiendo la interesante suite de comandos para WordPress WP-CLI.
Como podréis comprobar y sino os da miedo trabajar en consola tanto la suite completa como esta funcionalidad es tremendamente potente y sencilla de usar.
Conclusión
Como podemos ver existen unas cuantas alternativas al uso del plugin WP Migrate DB y para todos los gustos. Personalmente me quedo con WP-CLI por la posibilidad de scripting y con Search and Replace de Interconnectit por tener un uso mucho más amplio para cualquier desarrollo que almacene objetos serializados en MySQL.
Por supuesto existirán más alternativas o métodos que no conozco y estaría encantado de comentarlos. A vuestra disposición.
Fuentes
- Serialización (Wikipedia).
- Trabajando con datos personalizados en WordPress
- Better Search Replace: A New Plugin for Updating URLs and Text in WordPress Databases
- WP-CLI
Autor:
Última actualización:
Hola Oscar!
No sé si has comentado Velvet Blues Update URL’s (https://wordpress.org/plugins/velvet-blues-update-urls/). Es mi favorito y considero que funciona muy bien!
Un saludo.
Gracias. No conocía ese plugin. ¿Realiza también el cambio dentro de objetos? La verdad es que soy poco amigo de los plugins y en cuanto encuentro una solución genérica intento aplicarla antes de instalar un complemento.
¡Gracias por el apunte! 🙂
Aunque guardar datos serializados tiene sus ventajas en algunos casos específicos, la verdad es que en el caso de meta datos de posts he dejado de utilizarlo ya que la balanza se inclina del lado de los problemas.
Una solución de «bajo presupuesto» pero efectiva es que el dominio que utilicemos para desarrollar de forma local (o para hacer pruebas o lo que sea) tenga exactamente la misma cantidad de caracteres que el dominio con el sitio en producción. De este modo, el objeto serializado se mantiene íntegro 😛
Evidentemente el tema de guardar objetos en base de datos es un «buen dolor de muelas». Además es bastante frecuente. Sin embargo desde que descubrí la herramienta de Interconnecttit la verdad es que no he vuelto a tener ningún problema en la migración y sustituye perfectamente las cadenas serializadas porque analiza cada objeto uno por uno. Y encima es una solución que funciona en cualquier CMS. ¿Para qué más?
Graciosa la solución de bajo presupuesto, jaja.