Drupal, WordPress, Migration – Migrer de Drupal à WordPress


Qu’on se le dise, Drupal est un excellent CMS mais c’est un CMS de « riches ». En partant d’un constat simple, la plupart des équipes éditoriales ne sont composées souvent que de stagiaires mal payés, voir pas payés du tout, obligés de se former sur le tas… Bref, souvent considérer à tort comme de simples exécutants, des « petites mains » dont l’intérêt pour le donneur d’ordre est que ceux-ci soient le plus rapidement opérationnelles et ne posent pas de problème (surtout que la formation ne prenne que 5 minutes)
C’est la réalité du marché aujourd’hui et nous ne sommes ni là pour la déplorer mais juste pour la constater. Des gens tout à fait honorables n’hésitent pas à mentionner ce fait, peu avouable, avec une plus grande prudence langagière certes mais le résultat est le même. Il faut que l’administration soit simple, trivial avec la courbe d’apprentissage la plus rapide.

Pour l’exemple, je vous cite in extenso le 2eme point issu d’un appel d’offre.

Penser à une administration facile pour des administrateurs peu formés et avec un turn over important.

Partant de ce constat, si vous devez répondre à un projet de moyenne envergure financière, vous avez tout intérêt à préconiser ce fait WordPress.

Or au grand jeu de la courbe d’apprentissage, WordPress supplante encore très largement Drupal. Son temps de maitrise est quasi nul, c’est donc que vous allez pouvoir faire des devis extrêmement agressifs sans vous retrouvez dans une boucle de correctifs et de formation infinie
Paradoxalement, on choisit donc WordPress non pour ces qualités intrinsèques mais pour son faible coût d’apprentissage face à une équipe éditoriale souvent compose de « Newbies ».

Une fois ce paradoxe énoncé, on va voir comment migrer un site de Drupal vers WordPress. Ce paradoxe risque même de se renforcer compte tenu du fait que Drupal 7 va embarquer Symfony sous peu, ce qui ne manquera pas d’accroître la complexité de ce CMS, accroissant de facto son coût d’adoption et de développement.

Migration de Drupal vers WP

On va partir d’une BDD wordpress, toute neuve drupal_to_wp et la base d’origine de Drupal se nomme drupal6_17.

Pour mémoire, bien remplacer le nom des bases par les vôtres si vous utilsez les commandes SQL ci-dessous.

  • Nom de la BDD WordPress drupal_to_wp
  • Nom de la BDD Drupal drupal_to_wp
  • Préfixe des tables Drupal d_

1. Se connecter au client MySQL (nous sommes sur MAMP en local)

  /Applications/MAMP/Library/bin/mysql -u root -p
  USE drupal_to_wp;

2. Créer les catégories sous WP

#Create Categories
INSERT INTO drupal_to_wp.wp_term_taxonomy (term_id, taxonomy, description, parent)
SELECT
 d.tid `term_id`,
 'category' `taxonomy`,
 d.description `description`,
 h.parent `parent`
FROM drupal6_17.d_term_data d
INNER JOIN drupal6_17.d_term_hierarchy h
 USING(tid);

3. Créer les taxonomies sous WP

#Add Taxonomies
   INSERT INTO drupal_to_wp.wp_term_taxonomy (term_id, taxonomy, description, parent)
   SELECT
    d.tid `term_id`,
    'category' `taxonomy`,
    d.description `description`,
    h.parent `parent`
   FROM drupal6_17.d_term_data d
   INNER JOIN drupal6_17.d_term_hierarchy h
    USING(tid);

4. Insérer le contenu dans WP

# Import posts/pages
INSERT INTO drupal_to_wp.wp_posts (id, post_date, post_content, post_title, post_excerpt, post_name, post_modified, post_type, `post_status`)
SELECT DISTINCT
 n.nid `id`,
 FROM_UNIXTIME(n.created) `post_date`,
 r.body `post_content`,
 n.title `post_title`,
 r.teaser `post_excerpt`,
 IF(SUBSTR(a.dst, 11, 1) = '/', SUBSTR(a.dst, 12), a.dst) `post_name`,
 FROM_UNIXTIME(n.changed) `post_modified`,
 n.type `post_type`,
 IF(n.status = 1, 'publish', 'private') `post_status`
FROM drupal6_17.d_node n
INNER JOIN drupal6_17.d_node_revisions r
 USING(vid)
LEFT OUTER JOIN drupal6_17.d_url_alias a
 ON a.src = CONCAT('node/', n.nid)
WHERE n.type IN ('post', 'page', 'article');

5. Convertir les articles en post

# Turn articles IN TO posts
UPDATE drupal_to_wp.wp_posts SET post_type='post' WHERE post_type='article';

6. Indexer les posts dans des catégories WP

# ADD post TO category relationships
INSERT INTO drupal_to_wp.wp_term_relationships (object_id, term_taxonomy_id) SELECT nid, tid FROM drupal6_17.d_term_node;

7. Mettre à jour le nombre de post par catégorie

# UPDATE category COUNT
UPDATE drupal_to_wp.wp_term_taxonomy tt
SET `count` = (
 SELECT COUNT(tr.object_id)
 FROM drupal_to_wp.wp_term_relationships tr
 WHERE tr.term_taxonomy_id = tt.term_taxonomy_id);

8. Importer les commentaires dans WP

# Import comments
INSERT INTO drupal_to_wp.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, STATUS FROM drupal6_17.d_comments;

9. Dénombrer le nombre de commentaires par post dans WP

# UPDATE comment counts
USE wordpress;
UPDATE `wp_posts` SET `comment_count` = (SELECT COUNT(`comment_post_id`) FROM `wp_comments` WHERE `wp_posts`.`id` = `wp_comments`.`comment_post_id`);

10. Réparer les dégâts dans les contenus des posts

# Fix breaks IN post content
UPDATE drupal_to_wp.wp_posts SET post_content = REPLACE(post_content, '', '');

11. Fixer les chemin des images

# fix images IN post content
UPDATE drupal_to_wp.wp_posts SET post_content = REPLACE(post_content, '"/files/', '"/wp-content/uploads/');

Il est certain que ces commandes font l’impasse sur le traitement des utilisateurs (users) mais on part du principe que c’est le squelette ainsi que la chair et le sang du site que l’on veut migrer fissa par forcement faire de la thanatopraxie !

Les choses à savoir pour la suite des opérations

A priori, si vous passez l’ensemble des commandes SQL sans trop de dommages, vous pouvez vous concentrez sur la finalisation de votre migration en ayant en tête les points suivants.

  • Toujours conserver un backup des bases respectives de votre Drupal te de votre WordPress
  • N’oubliez pas de déplacer les images notamment du répertoire ./files dans le répertoire ./wp-content/uploads. Le répertoire de Drupal ./files possedé la même structure d’URL que celui de WordPress à savoir ./YYYY/MM/DD/filename. Il sera peut-être necessaire de renommer manuellement les répertoires. C’est la partie un peu délicate mais bon il faut savoir en passer par là !
  • Vous aurez sans doute besoin d’utiliser de constituer une table de redirection ou d’utiliser par exemple le plugin WordPress Redirection afin de rien perdre des bénéfices SEO de votre ancien site sur Drupal.

Source : http://www.mikesmullin.com/development/migrate-convert-import-drupal-5-to-wordpress-27/

Conclusion : Migrer un site d’un CMS à un autre n’est jamais anodin toutefois c’est parfaitement concevable. Pour avoir conçu de nombreux sites sous Drupal comme sous WordPress, il est indéniable que même si la procédure de migration peut vous causer quelque soucis, le gain ensuite que vous obtiendrez dans la formation à l’administration des fameux newbies de l’équipe éditoriale est incommensurable.

En savoir plus