Remplacer un domaine dans une base de données WordPress
Lors d’une migration ou d’une mise à jour de site, il est fréquent de devoir modifier un domaine dans l’ensemble des données stockées en base. C’est ce que nous avons cherché à faire en remplaçant un ancien domaine par un nouveau dans une base WordPress. Plusieurs méthodes ont été explorées, avec des résultats variables.
Utilisation de requêtes SQL dans phpMyAdmin
Nous avons d’abord tenté une approche directe en utilisant phpMyAdmin pour rechercher et remplacer l’ancien domaine dans toute la base de données. Une première requête a permis d’identifier les colonnes concernées :
SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'nom_de_la_base'
AND DATA_TYPE IN ('char', 'varchar', 'text', 'mediumtext', 'longtext');
À partir de cette liste, nous avons généré les commandes SQL nécessaires au remplacement :
SELECT CONCAT('UPDATE `', TABLE_NAME, '` SET `', COLUMN_NAME, '` = REPLACE(`', COLUMN_NAME, '`, "ancien-domaine", "nouveau-domaine") WHERE `', COLUMN_NAME, '` LIKE "%ancien-domaine%";')
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'nom_de_la_base'
AND DATA_TYPE IN ('char', 'varchar', 'text', 'mediumtext', 'longtext');
Cependant, cette méthode a montré certaines limites. Elle génère bien les requêtes nécessaires, mais celles-ci doivent ensuite être exécutées séparément, ce qui peut être fastidieux pour une base volumineuse.
Automatiser la modification avec un script PHP
Pour éviter l’exécution manuelle de multiples requêtes SQL, un script PHP a été proposé :
<?php
$mysqli = new mysqli("localhost", "utilisateur", "motdepasse", "nom_de_la_base");
if ($mysqli->connect_error) {
die("Échec de connexion : " . $mysqli->connect_error);
}
$sql = "SELECT TABLE_NAME, COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = 'nom_de_la_base'
AND DATA_TYPE IN ('char', 'varchar', 'text', 'mediumtext', 'longtext')";
$result = $mysqli->query($sql);
while ($row = $result->fetch_assoc()) {
$table = $row['TABLE_NAME'];
$column = $row['COLUMN_NAME'];
$updateQuery = "UPDATE `$table`
SET `$column` = REPLACE(`$column`, 'ancien-domaine', 'nouveau-domaine')
WHERE `$column` LIKE '%ancien-domaine%'";
$mysqli->query($updateQuery);
}
echo "Remplacement terminé !";
$mysqli->close();
?>
Ce script a l’avantage de traiter l’ensemble des tables en une seule exécution. Toutefois, son utilisation requiert un accès FTP et une exécution en environnement contrôlé, car toute erreur pourrait corrompre les données.
Méthodes simplifiées via WordPress
Pour éviter des manipulations trop techniques, nous avons exploré des solutions directement intégrées à WordPress. Plusieurs outils existent :
- Better Search Replace : Ce plugin permet d’effectuer le remplacement de manière intuitive depuis l’interface WordPress.
- WP-CLI : Avec la commande
wp search-replace 'ancien-domaine' 'nouveau-domaine' --all-tables, la modification est effectuée proprement, en gérant les données sérialisées. - WP Migrate Lite : Utile pour les migrations de site, il inclut une fonction de recherche-remplacement.
Ces solutions sont recommandées pour éviter toute manipulation hasardeuse des données et garantir une modification complète et sécurisée.
Conclusion
Les différentes approches testées ont montré que l’utilisation directe de SQL dans phpMyAdmin peut être efficace mais fastidieuse, tandis que les scripts PHP demandent une exécution prudente. Finalement, les outils spécifiques à WordPress (Better Search Replace, WP-CLI) sont les plus adaptés pour un remplacement rapide et sécurisé du domaine.
Si vous avez besoin d’aide pour effectuer ces modifications sur votre site, n’hésitez pas à nous contacter.





0 commentaires