Credit : Logo officiel
Créer un compte admin WordPress en urgence avec WP-CLI
Créer un compte admin WordPress en urgence avec WP-CLI
Lundi matin 8h30. Un client m'appelle, voix paniquée : sa boutique e-commerce sous WordPress doit faire une promo flash à 9h, et il vient de se rendre compte qu'il n'a plus accès au back-office. Mot de passe perdu, formulaire de réinitialisation qui n'envoie aucun mail (probablement un souci SMTP), et l'adresse email du compte admin n'est plus active depuis qu'il a changé de FAI il y a deux ans. Le site est en ligne, le panier fonctionne, mais impossible de modifier le bandeau ou de publier la promo. 30 minutes avant le lancement.
En pareil cas, tu sors WP-CLI et tu règles ça en 60 secondes. À condition d'avoir un accès SSH ou un panel qui propose un terminal. Voici la procédure que j'utilise au support, avec toutes les variantes selon ce que tu as comme accès.
Les scénarios où ça arrive
Dans mon expérience d'agent support, voici les situations qui amènent à devoir créer un admin en urgence :
- Mot de passe oublié + email obsolète : le client n'a plus accès à l'adresse mail du compte admin
- Plugin de sécurité qui verrouille tout : Wordfence, iThemes Security ou Limit Login Attempts qui ban l'IP du client
- Hack avec changement d'identifiants : un attaquant a modifié l'email et le mot de passe du super-admin
- Dev précédent disparu : le développeur freelance est parti sans transmettre les accès
- Migration ratée : après un import de base, les utilisateurs ne fonctionnent plus correctement
- Compromission de compte : besoin de créer un nouvel admin propre avant de supprimer les comptes douteux
- Souci SMTP : le mail de récupération n'arrive jamais parce que
wp_mail()est cassé
Dans tous ces cas, l'approche est la même : on contourne le formulaire de connexion et on agit directement sur la base de données via WP-CLI ou phpMyAdmin.
Pré-requis : WP-CLI installé
WP-CLI c'est l'outil officiel en ligne de commande pour WordPress, écrit en PHP, qui interagit directement avec ton installation. Sur la plupart des hébergements modernes, il est déjà disponible.
Vérifier qu'il est installé :
wp --version
Tu devrais voir WP-CLI 2.10.0 ou plus récent. Si la commande renvoie command not found, installe-le :
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp --version
Sur l'hébergement mutualisé IONOS, WP-CLI n'est pas installé par défaut, mais tu peux le mettre dans ton home :
cd ~
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
mv wp-cli.phar wp
chmod +x wp
alias wp="~/wp"
Étape 1 : se placer dans le bon répertoire
WP-CLI doit être lancé depuis la racine de l'installation WordPress (là où se trouve wp-config.php). Sur un hébergement mutualisé IONOS classique :
cd /home/htdocs/web
ls -la wp-config.php wp-load.php wp-settings.php
Si les trois fichiers sont là, tu es au bon endroit. Sur un VPS :
cd /var/www/exemple.fr/public
Étape 2 : créer le compte admin
La commande qui sauve la vie :
wp user create urgenceadmin urgence@exemple.fr --role=administrator --user_pass='Temp!Mdp2026SuperSolide'
Décryptons :
urgenceadmin: login du nouveau compteurgence@exemple.fr: email associé (peut être bidon si tu vas supprimer ce compte juste après)--role=administrator: rôle administrateur, accès complet--user_pass='...': mot de passe entre simples quotes pour éviter que le shell interprète les caractères spéciaux
Le mot de passe doit faire au moins 12 caractères avec majuscules, minuscules, chiffres et symboles. Évite les guillemets doubles et les $ qui peuvent être interprétés par bash.
Tu obtiens en retour :
Success: Created user 5.
Password: Temp!Mdp2026SuperSolide
Connecte-toi immédiatement sur /wp-admin avec ces identifiants. Ça marche.
Étape 3 : lister les utilisateurs existants
Avant de toucher à quoi que ce soit, regarde qui a quel rôle :
wp user list --fields=ID,user_login,user_email,roles,user_registered
Filtrer pour n'avoir que les administrateurs :
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered
Tu auras quelque chose comme :
+----+-------------+----------------------+---------------------+
| ID | user_login | user_email | user_registered |
+----+-------------+----------------------+---------------------+
| 1 | admin | client@exemple.fr | 2018-03-12 14:23:08 |
| 3 | dev_freelance | dev@autresite.fr | 2022-08-04 09:11:42 |
| 47 | wp_security | xxx@spam.ru | 2026-04-15 03:17:55 |
| 5 | urgenceadmin | urgence@exemple.fr | 2026-04-20 08:31:12 |
+----+-------------+----------------------+---------------------+
Là tu commences à voir des trucs intéressants. Le compte wp_security créé en pleine nuit avec un email russe ? Hautement suspect. Le compte dev_freelance qui n'a plus rien à faire là si le freelance n'est plus en mission ? À nettoyer.
Étape 4 : réinitialiser un mot de passe existant
Si tu connais le login mais que tu veux juste reprendre la main sur le compte principal :
wp user update admin --user_pass='NouveauMdp!Ultra2026Solide'
Tu peux aussi changer l'email pour que le formulaire de récupération marche à l'avenir :
wp user update admin --user_email=client@nouvelleadresse.fr
Ou mettre à jour les deux d'un coup :
wp user update admin --user_pass='NouveauMdp!Ultra2026' --user_email=client@nouvelleadresse.fr
Étape 5 : promouvoir un utilisateur existant en admin
Si un compte existe déjà avec un rôle inférieur (éditeur, auteur) et que tu veux le passer admin :
wp user set-role 3 administrator
Le 3 c'est l'ID utilisateur que tu as récupéré avec wp user list. Tu peux aussi utiliser le login :
wp user set-role dev_freelance administrator
Pour rétrograder un compte (passer un admin en éditeur, par exemple si tu soupçonnes un compte compromis sans vouloir le supprimer immédiatement) :
wp user set-role 47 subscriber
Étape 6 : supprimer les comptes suspects
Une fois que tu as ton accès propre, nettoie. Le compte wp_security du listing précédent, par exemple :
wp user delete 47 --reassign=1
Le --reassign=1 réattribue tout le contenu créé par ce compte (articles, médias, commentaires) à l'utilisateur ID 1 (souvent le compte admin original). Sans --reassign, WP-CLI te demande quoi faire des contenus orphelins.
Pour supprimer plusieurs comptes d'un coup :
wp user delete 47 52 99 --reassign=1
Étape 7 : nettoyer après l'urgence
Une fois que la situation est rétablie et que le client a son accès propre, n'oublie pas de supprimer le compte temporaire :
wp user delete urgenceadmin --reassign=1
C'est la partie que les gens oublient. J'ai déjà audité des sites où le compte urgenceadmin créé deux ans plus tôt était toujours actif avec son mot de passe temporaire. Catastrophique.
Alternative : pas d'accès SSH, que phpMyAdmin
Sur certains hébergements mutualisés très basiques, pas de SSH possible. Tu n'as que phpMyAdmin via le panel. Voici la procédure de secours.
Insérer un nouvel admin via SQL
Dans phpMyAdmin, sélectionne ta base WordPress, puis l'onglet SQL et exécute :
INSERT INTO wp_users (user_login, user_pass, user_nicename, user_email, user_registered, user_status, display_name)
VALUES ('urgenceadmin', MD5('Temp!Mdp2026Solide'), 'urgenceadmin', 'urgence@exemple.fr', NOW(), 0, 'Urgence Admin');
SET @user_id = LAST_INSERT_ID();
INSERT INTO wp_usermeta (user_id, meta_key, meta_value)
VALUES
(@user_id, 'wp_capabilities', 'a:1:{s:13:"administrator";b:1;}'),
(@user_id, 'wp_user_level', '10');
Quelques précisions importantes :
- Si ton préfixe de tables n'est pas
wp_, remplace partout dans la requête (par exemplewpx7_usersetwpx7_usermeta). Vérifie danswp-config.phpla variable$table_prefix. - Le
wp_capabilitiesdoit également avoir le bon préfixe dans la valeur sérialisée si ton préfixe n'est paswp_. Par exemple pourwpx7_, ce seraits:13:"administrator"qui devient parfois différent selon les configurations multisite. - WordPress utilise MD5 comme fallback de compatibilité : à la première connexion, il rehash automatiquement le mot de passe en bcrypt (depuis WP 6.8) ou en phpass (versions antérieures). Donc le MD5 c'est juste pour le premier login.
Vérification dans phpMyAdmin
Après l'insertion, vérifie :
SELECT u.ID, u.user_login, u.user_email, m.meta_value
FROM wp_users u
JOIN wp_usermeta m ON u.ID = m.user_id
WHERE m.meta_key = 'wp_capabilities';
Tu dois voir ton nouveau compte avec a:1:{s:13:"administrator";b:1;} dans la dernière colonne.
Erreurs courantes et leur fix
Erreur 1 : "Error establishing a database connection" en lançant WP-CLI
WP-CLI lit wp-config.php pour se connecter à la base. Si le fichier a un souci (mauvais credentials, hôte injoignable), WP-CLI ne peut rien faire. Vérifie :
wp db check
Si ça échoue, corrige les variables DB_NAME, DB_USER, DB_PASSWORD, DB_HOST dans wp-config.php avant de continuer.
Erreur 2 : "This does not seem to be a WordPress installation"
Tu n'es pas dans le bon répertoire. WP-CLI cherche wp-config.php à la racine. Soit tu te déplaces avec cd, soit tu utilises l'option --path :
wp user list --path=/home/htdocs/web
Erreur 3 : "Username already exists"
Tu essaies de créer un compte avec un login déjà pris. Soit tu changes le login, soit tu utilises wp user update pour modifier le compte existant.
Erreur 4 : le login marche mais la session expire immédiatement
Classique après une migration ou un changement de domaine : les cookies WordPress sont liés au domaine et au chemin. Vérifie dans wp-config.php que WP_HOME et WP_SITEURL correspondent bien à l'URL où tu te connectes :
wp option get siteurl
wp option get home
Erreur 5 : permissions de fichiers qui empêchent WP-CLI
Sur un VPS où tu lances WP-CLI en root mais que les fichiers WordPress appartiennent à www-data, tu peux avoir des warnings ou des actions qui échouent. Bonne pratique : lance toujours WP-CLI avec l'utilisateur qui possède les fichiers :
sudo -u www-data wp user create urgenceadmin urgence@exemple.fr --role=administrator --user_pass='Temp!Mdp2026'
Aller plus loin avec WP-CLI sur la gestion utilisateurs
Quelques commandes utiles pour la suite :
# Exporter tous les utilisateurs en CSV
wp user list --fields=ID,user_login,user_email,roles --format=csv > users.csv
# Forcer la déconnexion de tous les utilisateurs (utile après un hack)
wp user session destroy admin --all
wp user session destroy --all
# Compter les utilisateurs par rôle
wp user list --role=administrator --format=count
wp user list --role=editor --format=count
# Générer 10 utilisateurs de test
for i in {1..10}; do
wp user create "testuser$i" "test$i@local.fr" --role=author --user_pass='TestMdp2026!' --send-email=false
done
Pour aller plus loin
La gestion d'urgence WordPress, c'est tout un écosystème. Voici les sujets liés que je traite régulièrement :
- Commandes WP-CLI essentielles
- WordPress : changer de domaine avec WP-CLI
- Sécuriser WordPress, guide complet anti-hack
- Déboguer un WordPress qui ne charge plus
- Activer le mode debug WordPress
Mon kit de survie WordPress en 30 secondes
Quand un ticket tombe avec un client bloqué hors de son back-office, j'ai mes commandes en favori dans mon terminal. SSH, cd /home/htdocs/web, wp user create, login. C'est devenu réflexe.
Le truc à retenir : WP-CLI est la solution propre, phpMyAdmin c'est le plan B, et la suppression des comptes temporaires après l'urgence c'est obligatoire. Trop de sites traînent des comptes admin créés en panique il y a des mois, oubliés, avec des mots de passe faibles ou divulgués dans un chat de support. C'est exactement le genre de porte d'entrée qu'un attaquant adore.
Dernier conseil : configure dès maintenant un gestionnaire de mots de passe pour ton client (Bitwarden, 1Password) et un admin de secours avec un email surveillé. Comme ça la prochaine fois que ça arrive, ce sera 30 secondes au lieu de 30 minutes. Et tu n'auras pas à retrouver WP-CLI à 8h30 un lundi matin.