MySQL & Wordpress : Migration blog. Voie sans issue.
Bonjour,
Ma configuration WP actuelle
- Version de WordPress : 2.9.1
- Version de PHP/MySQL : 5.0.32
- Thème utilisé : RichWP Magazine Light
- Extensions en place :
- Nom de l'hebergeur : OVH
- Adresse du site : fermé au public pour le moment
Problèmes rencontrés :
Tout d'abord, je vous explique mon problème.
J'ai transféré toute une base de donnée de Drupal vers Wordpress en opérant de la sorte :
Code:
1 2 3 4 5 6 7
| TRUNCATE TABLE tempdb.wp_comments;
TRUNCATE TABLE tempdb.wp_links;
TRUNCATE TABLE tempdb.wp_postmeta;
TRUNCATE TABLE tempdb.wp_posts;
TRUNCATE TABLE tempdb.wp_term_relationships;
TRUNCATE TABLE tempdb.wp_term_taxonomy;
TRUNCATE TABLE tempdb.wp_terms; |
Puis
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| INSERT INTO tempdb.wp_terms (term_id, `name`, slug, term_group)
SELECT
d.tid, d.name, REPLACE(LOWER(d.name), ' ', '-'), 0
FROM tempdb.term_data d
INNER JOIN tempdb.term_hierarchy h
USING(tid)
;
INSERT INTO tempdb.wp_term_taxonomy (term_id, taxonomy, description, parent)
SELECT
d.tid `term_id`,
'category' `taxonomy`,
d.description `description`,
h.parent `parent`
FROM tempdb.term_data d
INNER JOIN tempdb.term_hierarchy h
USING(tid)
; |
Pour importer le contenu des articles :
Code:
1 2 3 4 5 6 7 8 9 10
| INSERT INTO
tempdb.wp_posts (id, post_date, post_content, post_title,
post_excerpt, post_name, post_modified)
SELECT DISTINCT
n.nid, FROM_UNIXTIME(created), body, n.title,
teaser,
REPLACE(REPLACE(REPLACE(REPLACE(LOWER(n.title),' ', '-'),'.', '-'),',', '-'),'+', '-'),
FROM_UNIXTIME(changed)
FROM tempdb.node n, tempdb.node_revisions r
WHERE n.vid = r.vid |
Pour récupérer les "relations" entre les articles et les catégories :
Code:
1 2
| INSERT INTO tempdb.wp_term_relationships (object_id, term_taxonomy_id)
SELECT nid, tid FROM tempdb.term_node; |
Pour mettre à jour le nombre de catégories :
Code:
1 2 3 4 5 6
| UPDATE wp_term_taxonomy tt
SET `count` = (
SELECT COUNT(tr.object_id)
FROM wp_term_relationships tr
WHERE tr.term_taxonomy_id = tt.term_taxonomy_id
); |
Pour garder le statut "non-approuvé" de certains commentaires :
Code:
1 2
| INSERT INTO tempdb.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 tempdb.comments; |
Pour mettre à jour les commentaires
Code:
UPDATE `wp_posts` SET `comment_count` = (SELECT COUNT(`comment_post_id`) FROM `wp_comments` WHERE `wp_posts`.`id` = `wp_comments`.`comment_post_id`);
Pour réparer les "ruptures" éventuelles d'articles :
Code:
UPDATE tempdb.wp_posts SET post_content = REPLACE(post_content, '', '');
Pour actualiser le chemin des fichiers images :
Code:
UPDATE tempdb.wp_posts SET post_content = REPLACE(post_content, '"/sites/default/files/', '"/wp-content/uploads/');
- toutes les requêtes ont été bien effectuées.
- Mais j'ai tout d'abord eu des soucis d'encodage lors de la migration de la table, la casse n'était pas respectée pour les articles (titres et contenus), et pour les noms d'utilisateurs. Comment faire correspondre les champs ? les jeux de caractère ?
Mes tables SQL :
ma table wp_posts ressemble à ça :
http://img685.imageshack.us/img685/5760/image15k.png
et ma table drupal_node_revisions (l'équivalent wp_posts chez drupal) ressemble à ça :
http://img294.imageshack.us/img294/7219/image16l.png
Ma base My SQL:
http://img297.imageshack.us/img297/3481/image17s.png
---
- Problèmes rencontrés :
- Lorsque par exemple je veux cliquer sur le nom d'un auteur Caroline DUFON pour avoir accès à la liste de ses posts, ça me fait ça : www.monsite.com/author/Caroline%20DUFON/ et me renvoie vers une erreur 404.
- Sur un total de 913 posts transférés vers Wordpress, certains n'ont pas été attribués au bon auteur, et environ 300 de ces posts ont été attribués automatiquement à admin.
- Je souhaiterais gérer les permaliens, de telle manière www.monsite.com/bonjour-a-tous, mais pour le moment je n'ai réussi qu'à faire www.monsite.com/bonjour_a_tous : ou est-ce que je peux modifier pour que le underscore soit un tiret? mod_rewrite?
- est-ce qu'il y a moyen de faire correspondre les champs multi-auteurs de Drupal à Wordpress? le multi-auteur se présente de la sorte pour drupal dans la BDD SQL :
http://img294.imageshack.us/img294/8457/image18o.png
Merci de bien vouloir apporter votre contribution, je m'en sors pas décidément...