Je viens d’importer sur ce blog tous les billets de mon ancien blog «geekeries», qui était jusqu’à présent sous Dotclear. Vous retrouverez donc tous ces anciens billets dans les archives. J’en profite pour faire un petit billet expliquant la procédure à suivre.
Tout d’abord, j’ai commencé par créer un deuxième blog WordPress. Cette étape n’est pas indispensable, mais j’ai préféré procéder ainsi pour ne pas pourrir ce blog en cas de problème lors de l’import. La création de ce second blog est aussi utile si le blog Dotclear source et le blog WordPress destination sont sur deux serveurs distincts sans possibilité pour le second de se connecter directement à la base de données du premier.
Sur ce second blog, j’ai installé le plug-in Dotclear 2 Importer. Pas bien compliqué à utiliser, ce plug-in nécessite juste de spécifier différents informations pour l’accès à la base de données de Dotclear (serveur, nom d’utilisateur, mot de passe, nom de la base, préfixe des tables, encodage des caractères), puis procède à l’import des utilisateurs, des catégories, des billets et des commentaires.
Ensuite, il faut prévoir de faire une passe sur tous les billets, pour corriger diverses choses :
- les liens internes vers d’autres billets,
- les liens vers les médias (enfin là perso je me suis simplifié la vie, j’ai repris mon répertoire /public de Dotclear et l’ai mis au bon endroit sur le nouveau site
), - les styles spécifiques à certaines extensions Dotclear (j’utilisais par exemple une extension pour la colorisation syntaxique).
Une fois satisfait du résultat, il ne me reste plus qu’à faire un export de ce blog au format WXR (Outils > Exporter) pour le réimporter ensuite sur le blog destination (Outil > Importer). Et voilà !
En complément, voici un petit bout de PHP qui permet de mettre en place une redirection automatique des billets de l’ancien blog Dotclear vers le blog WordPress, en se basant sur le titre du billet (l’URL ayant pu changer, notamment si elle contenait des accents), en remplaçant le fichier index.php de Dotclear :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
<?php $redir = "http://www.domaine.tld/wp/"; // URL de base du WP $dc2Base = "dc2base"; // nom de la base Dotclear $wpBase = "wpbase"; // nom de la base WP $sqlServer = "localhost"; // nom du serveur SQL $sqlUser = "user"; // utilisateur SQL $sqlPass = "pass"; // mot de passe SQL $mail = "user@domain.tld"; // mail de destination du rapport d'erreur $query = "index.php/"; // à remplacer par index.php? si le blog est en mode QUERY_STRING $request = urldecode($_SERVER["REQUEST_URI"]); if (($pos = strpos($request, $query . "post/")) !== false) { $url = substr($request, $pos + strlen($query . "post/")); $sql = mysql_connect($sqlServer, $sqlUser, $sqlPass); $query = "SELECT wp.post_name as redir FROM $wpBase.wp_posts wp, $dc2Base.dc2_post dc2 WHERE dc2.post_url = '$url' AND dc2.post_title = wp.post_title"; mysql_query("SET NAMES 'utf8'", $sql); $result = mysql_query($query, $sql); $nb_enr = mysql_num_rows($result); if ($nb_enr == 1) { $redir = $base . mysql_result($result, 0, "redir"); } else if ($mail != "") { mail($mail, "Problème de redirection DC2 vers WP", "Aucune correspondance trouvée pour l'URL $url"); } } else if (($pos = strpos($request, "feed/atom/comments") || strpos($request, "feed/rss2/comments")) !== false) { $redir = $base . "comments/feed/"; } else if (($pos = strpos($request, "feed/atom") || strpos($request, "feed/rss2")) !== false) { $redir = $base . "feed/"; } if (isset($redir)) { header("HTTP/1.1 301 Moved Permanently"); header("Location: $redir"); exit; } define('DC_BLOG_ID','default'); require 'inc/public/prepend.php'; ?> |
Seuls les billets et les flux de syndication seront redirigés, le reste ne l’est pas, ce qui évitera par exemple de perdre les pages de mots clés (les mots clés ne sont pas récupérés par le plug-in d’importation). Si aucune correspondance n’est trouvée pour un billet, il sera affiché dans Dotclear et un mail d’avertissement sera envoyé.