WordPress : comment faire si on déplace tout

C’est valable pour WordPress 2.5.1. Je ne sais pas pour les autres versions.
Lorsque vous voulez tout déplacer d’un répertoire vers un autre, et que vous ne voulez rien perdre de vos articles, c’est plutôt simple. Soit vous faites la modification avant de déplacer le répertoire, dans votre outil d’administration, soit vous… êtes dans le pétrin.
Mais plus maintenant !
Le principe est de modifier toute la configuration de votre WordPress par la nouvelle.
Voilà le cas typique : j’ai déplacé tout de :

http://olivier.pons.free.fr/wordpress/

vers :

http://olivier.pons.free.fr/

Solution : il vous faut ouvrir le fichier

wp-includes/functions.php

et aller à la fonction

wp_load_alloptions()

Juste après cette ligne :

$wpdb->suppress_errors($suppress);

vous y ajoutez l’affichage de toutes vos options :

echo "<pre style=\"text-align:left\">".var_export($alloptions_db,true)."</pre>";

Puis vous retournez sur votre blog et vous rafraichissez. Vous allez voir toute une série d’options apparaitre.

Cherchez lesquelles ont une valeur qui contient l’ancien répertoire.
Il vous faut transformer ces options sous cette forme :

  $wpdb->update($wpdb->options,
    array( 'option_value' => 'valeur nouvelle adresse' ),
    array( 'option_name'  => 'nom de l'option', 'autoload' => 'yes'));

et coller cela à la place de votre ligne qui affiche les variables (« echo … ») que je vous ai dit de mettre en début d’article.
Par exemple, mes deux options à appliquer étaient celles-ci :

  $wpdb->update($wpdb->options,
    array( 'option_value' => 'http://olivier.pons.free.fr' ),
    array( 'option_name'  => 'siteurl', 'autoload' => 'yes'));
  $wpdb->update($wpdb->options,
    array( 'option_value' => 'http://olivier.pons.free.fr' ),
    array( 'option_name'  => 'home', 'autoload' => 'yes'));

Ensuite, vous rafraichissez votre page, et hop, tout est écrit en base de données.

Après vérification que tout fonctionne, il ne vous reste plus qu’à supprimer toutes les lignes

$wpdb->update()

qui ne servent plus à rien.

Poster un commentaire

Vous devriez utiliser le HTML:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>