Migración de Drupal a WordPress

Drupal y WordPress

Tras muchos meses de inactividad, he decidido aprovechar las vacaciones para darle algunos retoques a la página. El mayor cambio que he hecho ha sido cambiar el sistema de gestión de contenidos (CMS) que usaba (Drupal) por WordPress.

No es que Drupal sea un mal CMS, todo lo contrario, ya que es un sistema muy completo, extensible, personalizable, con una amplia y activa comunidad de usuarios/desarrolladores e innumerables módulos para extenderlo. Pero para un blog personal yo lo noto algo pesado (lento) y un poco más difícil de mantener, actualizar y administrar.

Aunque para mi el mayor inconveniente de Drupal es lo poco práctico que resulta publicar artículos ya que su editor no es ninguna maravilla, especialmente a la hora de añadir imágenes a los artículos. Sé que hay módulos para mejorarlo y que también se puede publicar desde herramientas como Microsoft Word 2007 o Windows Live Writer, pero no siempre tenemos accesibles estas herramientas.

Con el cambio espero que me sea más fácil y rápido publicar artículos, y de esta forma no deje el blog “abandonado” por pereza y falta de tiempo para publicarlos. Si he hecho bien el trabajo no se debería notar en exceso el cambio de un CMS por el otro. Durante los próximos días iré haciendo pequeñas correcciones y ajustes, pero si encontráis cualquier cosilla podéis comentármela a través del formulario de contacto de esta web o bien dejando un comentario en este artículo.

A continuación detallo los pasos que he seguido para migrar de Drupal a WordPress intentando que el cambio no afecte en exceso a la apariencia y/o funcionalidad de mi página.

Paso Previo: Tema

Crear un tema nuevo para WordPress que se parezca lo máximo posible al de Drupal. Se trata de uno de los pasos más laboriosos ya que el sistema de plantillas de ambos gestores de contenidos no se parece demasiado.

  • Este paso seguramente implicará instalar WordPress en el ordenador para poder hacer pruebas rápidas durante la elaboración de este.
  • Añadir al tema código de seguimiento de Google Analytics. Dicho código se ha de poner entre los tags <head></head> del archivo header.php
  • Si tenemos un favicon, deberemos copiar el archivo favicon.ico en el directorio del tema y añadir entre los tags <head></head> del archivo header.php el siguiente fragmento:
<link rel="shortcut icon" href="<?php bloginfo('template_url'); ?>/favicon.ico" />
  • Si se han de añadir imágenes o enlaces relativos a la ruta del tema se puede usar el siguiente fragmento:

<?php bloginfo('template_directory'); ?>

Una vez completado el paso 0 , se puede proceder a hacer la migración. Aconsejo hacerlo con tiempo suficiente (2-3 horas), habiendo “practicado” antes en un entorno de pruebas. Para “practicar” se han de ir siguiendo cada uno de los pasos, anotando las dificultades que encontremos o los pasos que hagamos de diferente forma. De esta forma cuando se vaya a hacer de manera definitiva únicamente tendremos que seguir lo anotado y reducimos las posibilidades dedejar la página offline durante más tiempo del necesario.

Paso 1: Copia de seguridad de la base de datos

Hacer copia de seguridad de la base de datos de Drupal. Antes de proseguir es muy importante poner Drupal en “Modo mantenimiento” para evitar que otros visitantes dejen comentarios en la web mientras hacemos el backup.

Paso 2: Copia de seguridad de los archivos

Hacer copia de seguridad de los archivos alojados por Drupal, especialmente de los siguientes:

  • temas personalizados
  • plugins o como mínimo anotar el nombre
  • archivos subidos: por ejemplo imágenes de los artículos, etc.

Paso 3: Preparar Base de Datos

Crear una base de datos para WordPress, así como un usuario para acceder a ésta, en en MySQL. Hecho mediante el interfaz de gestión de mi hosting.

Paso 4: Instalar WordPress

4.1. Descargar WordPress en español de http://es.wordpress.org/

wget http://es.wordpress.org/wordpress-3.0-es_ES.tar.gz

4.2. Descomprimir en el directorio apropiado

tar -xzvf wordpress-3.0-es_ES.tar.gz

4.3. Renombrar el archivo de configuración general de WordPress suministrado como ejemplo al de configuración de verdad.

mv wp-config-sample.php wp-config.php

4.4. Editar el archivo wp-config.php para adaptarlo a nuestra configuración de base de datos. En particular hemos de modificar las siguientes líneas:


define('DB_NAME', 'nombredetubasededatos');
define('DB_USER', 'usuarioconaccesoalabasededatosmysql');
define('DB_PASSWORD', 'passwordanteriorusuario');
define('DB_HOST', 'nombreservidor');

  • En mi caso no me interesa guardar todas las revisiones de un artículo por lo que también he añadido la siguiente línea:

define('WP_POST_REVISIONS', false);

  • Y aprovecho para definir la frecuencia (en segundos) de autoguardado de artículos que están editandose, para ello añado la siguiente línea:

define('AUTOSAVE_INTERVAL', 60);

4.5. Cargar en el navegador la dirección http://tudominio.com/wp-admin/install.php para que WordPress inicie la autoinstalación. Rellenar los puntos que solicite.

Paso 5: Instalar el plugin WP Maintenance Mode

5.1. Buscar “WP Maintenance Mode”
5.2. Hacer click en “Instalar ahora”
5.3. Configurarlo y activarlo para que los visitantes no vean los trabajos que se van realizando.

Paso 6: Configurar WordPress

6.1. Copiar tema personalizado en el directorio wp-content/themes
6.2. Activar tema personalizado “Kilian Blog” en el menú Apariencia -> Temas
6.3. Añadir Widgets a la barra lateral en el menú Apariencia -> Widgets. En mi caso:
  • Buscar
  • Archivos
  • Menu personalizado (para “Mis Proyectos)
  • Enlaces
  • Texto – Música Favorita
6.4. Configurar enlaces permanentes en el menú Ajustes -> Enlaces permanentes. En mi caso, para manetener los mismos enlaces que usaba en Drupal, usaré la siguiente estructura personalizada:

contenido/%postname%

6.5. Configurar el resto de opciones al gusto (formato fecha, etc.)
6.6. Activar Protocolo de publicación Atom y XML_RPC en Ajustes -> Escritura para poder publicar desde herramientas de terceros (Microsoft Word 2007, Windows Live Writer)…

Paso 7: Migrar los datos

NOTA: Algunas de la consultas SQL utilizadas a continuación están basadas en el proceso de migración detallado en esta página, aunque adaptadas para mi caso concreto y/o corregidas.

7.1. Abrir MySQL
7.2. Vaciar todos los comentarios y artículos de WordPress


TRUNCATE TABLE wp_comments;
TRUNCATE TABLE wp_postmeta;
TRUNCATE TABLE wp_posts;
TRUNCATE TABLE wp_term_relationships;
TRUNCATE TABLE wp_term_taxonomy;
TRUNCATE TABLE wp_terms;

7.3. Copiar todos los artículos de la antigua base de datos (drupal) a la nueva (wordpress):

INSERT INTO
wp_posts (id, post_date, post_date_gmt, post_content, post_title,
post_excerpt, post_name, post_type, post_modified, post_modified_gmt,
post_author)
SELECT DISTINCT
n.nid, FROM_UNIXTIME(created),
FROM_UNIXTIME(created-7200), body, n.title, teaser, LOWER(n.title),
(CASE n.type
WHEN 'story' THEN 'post'
WHEN 'blog' THEN 'post'
ELSE n.type
END) AS type,
FROM_UNIXTIME(changed) ,
FROM_UNIXTIME(changed-7200) ,
1
FROM drupal.node n, drupal.node_revisions r
WHERE n.vid = r.vid

7.4. Actualizar los enlaces permanentes para que sean iguales que los de Drupal:

UPDATE wp_posts, drupal.url_alias as d
SET post_name = TRIM(LEADING 'contenido/' FROM d.dst)
WHERE d.src LIKE 'node/%'
AND NOT d.src LIKE '%/feed'
AND wp_posts.Id=(TRIM(LEADING 'node/' FROM d.src))

7.4. Importar todos los comentarios:

INSERT INTO wp_comments (comment_post_ID, comment_date,
comment_content, comment_parent, comment_author,
comment_author_email, comment_author_url, comment_approved)
SELECT nid, FROM_UNIXTIME(timestamp), comment, thread,
name, mail, homepage,
(case STATUS WHEN 0 THEN 1 ELSE 0 END)
FROM drupal.comments

7.5. Actualizar conteo de comentarios en los posts

UPDATE wp_posts
SET comment_count = (SELECT COUNT(comment_post_id)
FROM wp_comments
WHERE wp_posts.id = wp_comments.comment_post_id);

Paso 8: Menú “Mis Proyectos”

Para simular el menú “Mis Proyectos”, usaremos los posts de tipo “Página” que ya se habrán importado en el paso anterior.

8.1. Deshabilitamos la posibilidad de agregar comentarios en las entradas de tipo “Página” ejecutando la siguiente consulta SQL:

UPDATE wp_posts SET ping_status='closed', comment_status='closed' WHERE post_type='page'

8.2. Apariencia –> Menús –> Crear menú –> “Mis proyectos”
8.3. Añadir páginas correspondientes a mis proyectos al menú
8.4. Apariencia –> Widgets –> Asociar menú creado al widget “Menú personalizado” creado anteriormente

Paso 9: Formulario de contacto

9.1. Instalar plugin “Fast and Secure Contact Form for WordPress” de la misma forma que se hizo para el plugin “WP Maintenance Mode”.
9.2. Activar el plugin
9.3. Configurar el plugin
9.4. Crear una nueva página desde el menú Páginas–>Añadir nuevo con este contenido:

si-contact-form form='1' (rodeado de corchetes [ y ])

9.5. Añadir un nuevo “Menú Personalizado” llamado “Contactar” que incluya esta página.

Paso 10: Categorías/Taxonomía

Aunque se puede automatizar la migración de categorías/taxonomías, he preferido hacer este proceso manualmente para reorganizar y eliminar algunas no usadas. De todas formas, si estáis interesados en hacerlo automáticamente me vuelvo a remitir a la página mencionada anteriormente.

Paso 11: Enlaces de amigos

Añadir enlaces mediante la opción Enlaces–>Añadir nuevo. Asociarlos a la categoría “Enlaces amigos” para que aparezca en el panel con ese título.

Paso 12: Imagenes existentes

Copiar/Mover las imágenes del directorio de Drupal al de WordPress. Al mantener exactamente la misma estructura no hará falta editar los artículos para actualizar las rutas.

Paso 13: Otros plugins interesantes

Para completar/mejorar la funcionalidad del blog he optado por usar otros plugins interesantes que enumero a continuación:

Actualización 26/07/2010: se ha añadido al paso 0 instrucciones referentes al uso de favicon.

3 respuestas a Migración de Drupal a WordPress

Deja un comentario

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

Archivo de publicaciones