Pasar al contenido principal

Cómo automatizar la migración de contenido de WordPress a Drupal con WordPress Migrate SQL

Migrar un sitio de WordPress a Drupal implica mover miles de posts usuarios, términos de taxonomía y archivos sin errores manuales. WordPress Migrate SQL es un módulo de Drupal que automatiza esta migración directamente desde la base de datos de WordPress, ofreciendo una importación sin código para sitios estándar y una ruta totalmente personalizable para contenido heredado o con muchos plugins. Este artículo cubre el caso de uso detrás del traslado de WordPress a Drupal, el desafío de migrar el contenido y cómo ejecutar esa migración con el módulo WordPress Migrate SQL.

Algunos sitios de WordPress llegan a un punto en el que el modelo de contenido ya no se adapta a las necesidades de la organización. Los tipos de contenido personalizados, las entidades personalizadas y los campos personalizados se vuelven necesarios para representar los datos internos con precisión, y Drupal los admite todos, dando forma a esos datos con total flexibilidad.

Otros sitios llegan a ese punto por la IA. Drupal ha construido un sólido ecosistema de IA en los últimos años, permitiendo integraciones de todo tipo necesario: creación de contenido, comprobaciones de accesibilidad, RAG, entre otras. Estas son las dos situaciones que hay detrás de la mayoría de las migraciones de WordPress a Drupal: una arquitectura que el sitio ha superado, o una integración de IA que WordPress no puede soportar de forma nativa.

El reto de migrar contenido de WordPress a Drupal

El reto principal en una migración de WordPress a Drupal es migrar el contenido en sí. Los sitios de WordPress pueden tener miles de piezas de contenido que deben trasladarse al sitio de Drupal.

Un proyecto de migración completo pasa por varias fases: rediseñar el sitio si es necesario, construir la nueva arquitectura y crear un nodo de Drupal por cada post o página de WordPress. La creación del contenido es donde se concentra el trabajo real, ya que cada imagen, cada usuario y cada traducción deben llegar, además de adaptar el contenido a un formato diferente definido por la nueva arquitectura.

Una migración de contenido manual no es viable debido a sus altos costes y riesgos. Realizado a mano, este trabajo es propenso a errores humanos. Un error puntual es fácil de arreglar, pero un error sistemático, repetido en miles de piezas de contenido, puede costar más tiempo de arreglar del que habría llevado automatizar toda la migración.

Para realizar migraciones automáticas, Drupal tiene su propio ecosistema de migración. A través del API de Migrate, es posible diseñar y ejecutar migraciones completas de contenido. Metadrop ha contribuido con un módulo especializado en migraciones de WordPress: WordPress Migrate SQL.

El módulo migra todo el contenido y también permite crear migraciones personalizadas. Su configuración base proporciona una migración lista para usar de todos los posts de WordPress como artículos de Drupal, y también importa usuarios, términos y archivos. Hay un tutorial detallado disponible en la documentación del módulo.

Cómo WordPress Migrate SQL lee e importa los datos de WordPress

El módulo lee todo el contenido directamente de la base de datos de WordPress, por lo que se debe de configurar Drupal para conectarse primero a esa base de datos. Funciona a través de la API de Migrate de Drupal, leyendo cada tabla de WordPress: wp_posts, wp_terms, wp_attachments, wp_users y wp_terms_relationships. Entiende la arquitectura de WordPress para migrar el sitio, y puede leer estas tablas incluso cuando se crearon con un prefijo de tabla de WordPress diferente.

Esta conexión directa a la base de datos es lo que diferencia este enfoque de la exportación XML de WordPress. En lugar de trabajar a partir de un archivo de exportación fijo, el módulo recopila todo el contenido, filtra solo lo necesario e incluso puede obtener datos adicionales proporcionados por plugins, como las traducciones. WordPress Migrate cubre un terreno similar pero realiza una migración completa de contenido basada en el formato de exportación WXR de WordPress.

Manejar todos los casos de uso posibles de WordPress dentro de un solo módulo sería demasiado difícil, por lo que el módulo se centra en permitir migrar todo lo que WordPress proporciona por defecto. Debido a que se conecta directamente a la base de datos, se puede extender para recopilar cualquier contenido específico de un plugin que necesite el sitio.

Esa extensibilidad es lo que divide el módulo en dos formas de migrar: habilitando el submódulo "WordPress Migrate SQL - Basic", o generando un módulo personalizado. La forma básica no requiere código personalizado e importa los posts de WordPress como artículos de Drupal de serie. La forma personalizada genera una plantilla que se puede ampliar para abordar personalizaciones específicas del sitio.

Esas personalizaciones suelen ser necesarias para bases de datos heredadas con años de contenido acumulado: enlaces rotos, marcado personalizado que no encaja en el nuevo sitio, plugins de traducción como el Plugin Multilingüe de WordPress, o shortcodes que necesitan procesamiento. Ambas rutas comparten la misma configuración y la misma ejecución, lanzando la migración de posts mediante --execute-dependencies para que los usuarios, términos y archivos adjuntos se ejecuten primero en el orden correcto.

Habilitación y configuración del módulo

Antes de habilitar el módulo, es necesario configurar que la base de datos de WordPress sea accesible desde el servidor de Drupal con al menos privilegios SELECT.

Además de configurar la base de datos, es necesario instalar el módulo drupal/migrate_tools para ejecutar las migraciones. Es utilizado internamente por el submódulo 'WordPress Migrate SQL - Basic' para realizar la migración a través de la interfaz de usuario, y es el estándar para ejecutar migraciones personalizadas.

El primer paso es instalar y habilitar el módulo base, que será utilizado por ambos métodos de migración. Una vez habilitado, configure la conexión a la base de datos de WordPress en Configuración → Sistema → WordPress Migrate SQL, completando las credenciales de la base de datos y la URL base de los archivos. Esto conecta Drupal a la base de datos de WordPress independientemente de la ruta que se siga. Así es como se ve el formulario de configuración:

Formulario de configuración de WordPress MIgrate SQL

Después de configurar las credenciales, se puede decidir si realizar una migración básica o una totalmente personalizada.

Migración básica de serie

Habilitar "WordPress Migrate SQL - Basic" añade una pantalla de importación en Configuración → Sistema → WordPress Migrate SQL → Importar.

La página de importación tendrá este aspecto:

Página con el estado de la migración aportado por WordPress Migrate SQL

Esta página permite tener una visión rápida de cuánto contenido se va a migrar. Después de pulsar importar, se migrará todo el contenido, mostrando una barra de progreso durante el proceso. Una vez finalizado el proceso, se habrán migrado los usuarios, categorías, imágenes y posts. También hay una operación de reversión disponible que deshace todo en caso de que algo parezca incorrecto.

Módulo personalizado

La ruta personalizada se basa en esa misma configuración y ejecuta drush generate wordpress-migration en su lugar. El comando solicita el nombre del módulo, nombre máquina, tipo de nodo de destino, campo de imagen, formato de texto y los vocabularios/campos de categorías/etiquetas, luego genera cuatro migraciones (usuarios, términos, archivos adjuntos, posts) más archivos de configuración de soporte y un README, listos para editar más a fondo. La ejecución del comando se ve así:

Salida del comando de Drush para generar una migración de WordPress

Después de crear el módulo a través del comando drush generate, se generará un módulo personalizado como este:

Modulo custom generado mediante la generación de código de WordPress Migrate SQL

Contiene:

  • Configuración: si no existe aún, añade el campo de categoría y el vocabulario al artículo.
  • Migraciones: Esto incluye las cuatro migraciones iniciales para posts, usuarios, términos y archivos adjuntos.

Después de habilitar el módulo, se tendrán las migraciones listas para ejecutar:

Estado de la migración de wordpress generada mediante el comando de Drush

En este punto, el módulo personalizado no tiene ninguna diferencia con el módulo básico excepto los diferentes nombres de migración y el hecho de que es necesario ejecutar comandos en el servidor. Su principal ventaja es que ahora es posible modificar el código de migración para:

  • Añadir más migraciones a la carpeta de migración si es necesario. Por ejemplo, por defecto solo posts, pero quizás sea necesario migrar también páginas personalizadas. En ese caso, esto se soluciona añadiendo un nuevo archivo de migración, basado en la migración de posts original.
  • Modificar las cuatro migraciones base en caso de que sea necesario:
    • Extraer y configurar módulos específicos de WordPress.
    • Procesar algunos valores provenientes de WordPress. Por ejemplo, contenido proveniente de los cuerpos de las posts:
      • HTML malformado.
      • HTML con un marcado que no se estiliza correctamente en el módulo. Por ejemplo: vídeos de YouTube que se añaden en iframes pero en Drupal es necesario importarlos añadiendo marcado específico de Drupal para CKeditor.
      • URLs rotas.
  • Añadir plugins de proceso de Migrate que permiten realizar cualquier procesamiento de campo de origen personalizado para la migración.

Casos de uso exitosos

El módulo se ha utilizado para migrar sitios de WordPress para ONG y otras organizaciones, con estas migraciones reales promediando de 500 a 2000 posts por sitio.

En estos proyectos, el proceso se mantiene consistente: habilitar WordPress Migrate SQL, preparar una migración base personalizada y usarla como punto de partida. Esto evita tener que replantear cómo leer las tablas base de WordPress en cada proyecto, dejando el trabajo centrado en las necesidades comerciales específicas de cada proyecto.

Conclusión

Migrar manualmente un sitio de WordPress a Drupal es lento y propenso a errores a cualquier escala real, por lo que es necesario automatizarlo. WordPress Migrate SQL automatiza esa migración directamente desde la base de datos de WordPress, cubriendo posts, usuarios, términos y archivos.

Los sitios de WordPress simples se pueden migrar utilizando la importación básica. Los sitios con marcado personalizado, traducciones o plugins contribuidos que no se pueden migrar directamente pueden comenzar desde el módulo generado y ajustar las migraciones que necesiten.

Consulte la página del módulo.

  • Omar Lopesino

    Omar Lopesino

    Senior Drupal developer