Créer un compte admin WordPress en urgence avec WP-CLI

Credit : Logo officiel

Créer un compte admin WordPress en urgence avec WP-CLI

Dylan D. — Agent Support Technique Serveur WordPress 1868 mots 10 min de lecture

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 :

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 :

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 :

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 :

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.

# Articles similaires

Sur les memes sujets et plus loin