Modifier ses préfixes de tables WordPress à postériori

Type de snippet : SQL/Query WP

Pourquoi changer ses préfixes de tables ?

Il peut y avoir diverses raisons qui font que l’on ait besoin de modifier ses préfixes de tables en bdd :

  • On a déjà un site en place, et on se rend compte qu’on a fait l’installation de base de données en laissant le préfixe par défaut wp_ . Il est souhaitable de le changer pour des questions de sécurité (plus à ce sujet sur le blog SecuPress).
  • Quand on veut héberger plusieurs sites WordPress dans une bdd unique.
  • Un autre cas de figure similaire au précédent, j’ai eu besoin d’héberger dans une même bdd, une version de staging et une version de prod du site d’un client qui n’avait qu’un hébergement mutualisé ovh perso (donc n’offrant qu’une seule bdd). Pour le coup il me fallait les différencier en modifiant les préfixes pour avoir à disposition les deux installations de site.

Requêtes SQL à renseigner dans phpMyadmin ou Adminer

Avant de faire quoique ce soit comme manipulation, on fait une sauvegarde de la bdd. On va partir du principe que l’on a un préfixe wp_ qui devra être changé en num42wp_

Renommer toutes ses tables

On va commencer par renommer toutes ses tables à l’aide de la requête RENAME TABLE :

RENAME TABLE `wp_commentmeta` TO `num42wp_commentmeta`;
RENAME TABLE `wp_comments` TO `num42wp_comments`;
RENAME TABLE `wp_links` TO `num42wp_links`;
RENAME TABLE `wp_options` TO `num42wp_options`;
RENAME TABLE `wp_postmeta` TO `num42wp_postmeta`;
RENAME TABLE `wp_posts` TO `num42wp_posts`;
RENAME TABLE `wp_termmeta` TO `num42wp_termmeta`;
RENAME TABLE `wp_terms` TO `num42wp_terms`;
RENAME TABLE `wp_term_relationships` TO `num42wp_term_relationships`;
RENAME TABLE `wp_term_taxonomy` TO `num42wp_term_taxonomy`;
RENAME TABLE `wp_usermeta` TO `num42wp_usermeta`;
RENAME TABLE `wp_users` TO `num42wp_users`;

Il est fort probable qu’il y en ait davantage que les 12 tables de base du fait de l’utilisation d’extensions, et/ou de l’utilisation de l’option multisite. Le changement de préfixe devra aussi être fait sur ces tables additionnelles.

Modifier aussi des champs dans au moins 2 tables

Le changement de préfixe des tables wp_options et wp_usermeta ne suffira pas. Les anciens préfixes wp_ apparaissent aussi à l’intérieur de ces tables. Il faut aussi modifier ça pour pouvoir continuer à accéder à l’admin avec les identifiants enregistrés en base.

Modification de la table options :

UPDATE `num42wp_options`
SET `option_name` = REPLACE( option_name, 'wp_', 'num42wp_' )
WHERE `option_name` LIKE 'wp_%';

Modification de la table usermeta :

UPDATE `num42wp_usermeta`
SET `meta_key` = REPLACE( meta_key, 'wp_', 'num42wp_')
WHERE `meta_key` LIKE 'wp_%';

Comme des plugins ont aussi sûrement installé d’autres tables ou modifié celle de bases, il faut s’assurer qu’il n’y a pas d’autres champs à modifier. Pour les trouver, il faudra alors faire une recherche avec les outils du gestionnaire de bdd (phpMyAdmin ou Adminer) et faire des modifications manuelles.

Modifier le fichier wp-config.php

Maintenant il ne faut pas oublier de modifier le préfixe de table indiqué dans le fichier wp-config.php

$table_prefix = 'wp_';
// devient
$table_prefix = 'num42wp_';

Tester le site sous toutes ses coutures et si tout est OK (ça devrait !) faire une nouvelle sauvegarde de la bdd.