
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
wget http://es.wordpress.org/wordpress-3.0-es_ES.tar.gz
tar -xzvf wordpress-3.0-es_ES.tar.gz
mv wp-config-sample.php wp-config.php
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);
Paso 5: Instalar el plugin WP Maintenance Mode
Paso 6: Configurar WordPress
- Buscar
- Archivos
- Menu personalizado (para “Mis Proyectos)
- Enlaces
- Texto – Música Favorita
contenido/%postname%
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.
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;
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
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))
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
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.
UPDATE wp_posts SET ping_status='closed', comment_status='closed' WHERE post_type='page'
Paso 9: Formulario de contacto
si-contact-form form='1' (rodeado de corchetes [ y ])
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.
Comentarios en Facebook

Si en lugar de interactuar directamente con la base de datos preferís ejecutar un programa Java que haga el trabajo, uno open source está disponible aquí http://modeling-languages.com/migrating-drupal-6-to-wordpress-3/
Los no expertos pueden utilizar los servicios ofrecidos en http://wordpressdrupal.com/ para ahorrarse dolores de cabeza