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.

wpdb_migrate

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.

SRDB_v3_1

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.

Better_Search_Replace

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.

wp search replace   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

Comparte si te ha gustado

Autor:
Última actualización:

4 comentarios

  1. 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 😛

    1. 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.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

De acuerdo con lo dispuesto en el Reglamento (UE) 2016/679 de 27 de abril de 2016, consiento que mis datos sean tratados bajo la responsabilidad de Oscar Gascón Arjol para recibir respuesta a consultas. publicación de comentarios del blog y que las conserve mientras haya un interés mutuo para ello. Me doy por informado que tengo derecho a revocar este consentimiento en cualquier momento y a ejercer los de acceso, rectificación, portabilidad y supresión de mis datos y los de limitación y oposición al tratamiento dirigiéndome por email a me@oscargascon.es. También estoy informado de que puedo reclamar ante la autoridad de control a www.agpd.es.