25/11/2024

WordPress

WordPress et WP-CLI : rechercher et remplacer dans la base de données

I. Présentation

Dans ce tutoriel, nous allons utiliser WP-CLI de manière à effectuer une action de type "rechercher et remplacer" dans la base de données d'un site WordPress, de manière simple, sans écrire notre propre requête SQL.

Pour manipuler la base de données de son site WordPress, on peut utiliser des requêtes SQL ou s'appuyer sur une interface telle que PhpMyAdmin. Néanmoins, ceci implique de maîtriser le langage SQL et de connaître la structure de la base de données WordPress. De plus, une mauvaise requête SQL peut s'avérer dévastatrice....

L'outil WP-CLI permet d'interagir auprès de son site WordPress directement en ligne de commande ! Simple d'installation, il va permettre de réaliser de nombreuses actions sur le site : installer une extension, gérer les rôles, mettre à jour WordPress, gérer les articles, etc.... Ce projet est soutenu par diverses entreprises, dont Automattic, l'entreprise qui est derrière WordPress.

Vous l'aurez compris en lisant le titre de cet article, aujourd'hui on va s'intéresser à un cas spécifique : rechercher et remplacer une chaîne de caractères dans la base de données WordPress. Récemment, j'ai utilisé cette technique pour un site qui changeait de nom de domaine afin que ce soit pris en compte sur les liens internes des articles, dans la configuration de certains plugins, etc... Car le fait de changer l'adresse du site dans les paramètres de WordPress n'est pas toujours suffisant.

II. Installation de WP-CLI

L'installation de WP-CLI est simple et s'effectue en quelques commandes, sur le serveur où est déployé le site WordPress. Suite à l'installation, la machine dispose d'une nouvelle commande nommée "wp". À partir de votre shell Linux, vous devez exécuter la commande suivante pour récupérer l'installeur :

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

Une fois que c'est fait, exécutez la commande ci-dessous pour obtenir des informations sur le fichier téléchargé et vérifier qu'il est prêt à fonctionner :

php wp-cli.phar --info

Il ne reste plus qu'à changer les droits sur le fichier pour ajouter les droits d'exécution, puis nous allons le déplacer dans "/usr/local/bin" sous le nom de "wp" pour que l'on puisse l'utiliser simplement avec le nom de commande "wp".

chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

Il ne reste plus qu'à utiliser l'outil !

III. Rechercher et remplacer avec WP CLI

L'outil WP dispose d'une action nommée "search-replace" qui correspond exactement à ce que l'on souhaite faire. Différentes options permettent d'affiner la requête : nous en verrons quelques-unes. Partons du principe que l'on souhaite rechercher et remplacer "domaine-abcd.fr" par "domaine-1234.fr".

La première chose à faire, c'est de se positionner à la racine du répertoire d'installation de WordPress. Par exemple, si mon site WordPress est installé dans "/var/www/wordpress/", je dois me positionner dans ce répertoire sinon WP-CLi ne fonctionnera pas !

cd /var/www/wordpress/

Ensuite, il faut préciser d'abord la chaîne à rechercher et remplacer, puis la chaîne de substitution. Ce qui donne :

wp search-replace 'domaine-abcd.fr' 'domaine-1234.fr'

Néanmoins, nous n'allons pas nous arrêter là. L'option "--dry-run" est super utile, car elle permet d'exécuter la requête en mode simulation, c'est à dire d'avoir le résultat sans effectuer les changements réellement. Ceci permet d'avoir une idée de l'impact de la commande que l'on s'apprête à exécuter. Ainsi, si cela semble correct, on peut exécuter la même requête sans cette option pour appliquer les changements ! Bien que simple à utiliser, WP-CLI est très puissant donc il faut l'utiliser avec précautions !

Ainsi, la commande précédente devient :

wp search-replace 'domaine-abcd.fr' 'domaine-1234.fr' --dry-run

En exécutant cette commande, on obtient une liste de tables de la base de données, avec des noms de colonnes et le nombre d'occurrences à remplacer à chaque fois. Dans l'exemple ci-dessous, il y a 4 550 remplacements à effectuer ! Le détail par colonne de chaque table est affiché.

WP-Cli Search and replace

Imaginons que l'on souhaite exclure une table du traitement, car on sait qu'il y a des informations qu'il ne faut pas remplacer, on peut la préciser. Par exemple, avec la table "wordpress_users" correspondante aux utilisateurs :

wp search-replace 'domaine-abcd.fr' 'domaine-1234.fr' --skip-tables=wordpress_users --dry-run

Une fois que le résultat de la simulation est satisfaisant, on peut appliquer les changements :

wp search-replace 'domaine-abcd.fr' 'domaine-1234.fr' --skip-tables=wordpress_users

Tout comme pour la simulation, l'opération est relativement rapide ! Pour finir, je souhaite attirer votre attention sur des options supplémentaires :

  • --all-tables : inclure toutes les tables au périmètre, car sans cette option, les tables liées aux extensions ne sont pas analysée ! Pour couvrir toute l'installation de WordPress, cette option est utile.
  • --allow-root : sert à exécuter les commandes WP avec le compte root directement (si l'on est connecté en root sur le serveur)
  • --skip-columns : exclure une colonne d'une table, plutôt qu'une table entière

Voici un exemple d'utilisation  :

wp search-replace 'domaine-abcd.fr' 'domaine-1234.fr' --skip-tables=wordpress_users --all-tables --allow-root

IV. Conclusion

Vous venez d'effectuer vos premiers pas avec WP-CLI ! Un outil très utile pour le rechercher et remplacer dans la base de données WordPress ! Ne négligez pas l'option "--dry-run", elle est indispensable pour éviter les mauvaises surprises ! Il existe d'autres options détaillées dans l'aide officielle disponible à cette adresse :

author avatar
Florian BURNEL Co-founder of IT-Connect
Ingénieur système et réseau, cofondateur d'IT-Connect et Microsoft MVP "Cloud and Datacenter Management". Je souhaite partager mon expérience et mes découvertes au travers de mes articles. Généraliste avec une attirance particulière pour les solutions Microsoft et le scripting. Bonne lecture.
Partagez cet article Partager sur Twitter Partager sur Facebook Partager sur Linkedin Envoyer par mail

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.