# WP-CLI : 15 commandes qui changent vraiment le quotidien d’un développeur

> Terminal ouvert, base à jour, cache vidé : WP-CLI remplace des dizaines de clics par une ligne. Voici les commandes que j'utilise vraiment, chaque jour.

- Auteur : Clément Hadrot
- Publié le : 2020-02-11
- Mis à jour le : 2020-02-11
- Catégorie : Outils &amp; workflow
- URL : https://wpmoderne.dev.wordpress-developpement.fr/outils/wp-cli-commandes-essentielles-quotidien/

## L’essentiel

- Installer un site complet en une commande
- Rechercher-remplacer sans casser les données sérialisées
- Automatiser plugins, thèmes et utilisateurs

Il y a encore des développeurs WordPress qui n'ont jamais ouvert un terminal pour autre chose que lancer `npm install`. C'est dommage, parce que WP-CLI transforme des tâches qui prennent cinq minutes dans l'administration en une commande qui s'exécute en deux secondes. Pas besoin de charger tout le poids de `wp-admin`, ses scripts et ses requêtes : on parle directement à WordPress depuis la ligne de commande.

Je ne vais pas vous refaire la documentation officielle : elle est déjà excellente. À la place, voici les commandes que j'utilise réellement, chaque semaine, sur les sites que je maintiens — celles qui ont remplacé des habitudes prises dans l'admin.

## Créer et configurer un site en une ligne

Pour un environnement de test rapide, plus besoin de suivre l'assistant d'installation en cinq écrans :

```
wp core download --locale=fr_FR
wp config create --dbname=test --dbuser=root --dbpass=root
wp core install --url=test.local --title="Site de test" \
  --admin_user=admin --admin_password=admin --admin_email=admin@test.local
```

Trois commandes, un site fonctionnel. J'y ajoute souvent `wp plugin install` et `wp theme activate` à la suite, dans un petit script bash que je réutilise pour chaque nouveau projet.

## Rechercher-remplacer sans tout casser

C'est la commande qui m'a le plus fait gagner de temps : `wp search-replace`. Contrairement à un remplacement SQL brutal, elle comprend les données sérialisées de WordPress (les options de thème, les réglages de widgets, certains champs personnalisés) et recalcule correctement la longueur des chaînes.

```
wp search-replace 'http://site.local' 'https://site-production.fr' \
  --skip-columns=guid --precise --report-changed-only
```

> L'essentiel à retenir : Installer un site complet en une commande ; Rechercher-remplacer sans casser les données sérialisées ; Automatiser plugins, thèmes et utilisateurs

L'option `--dry-run` mérite d'être citée à part : elle affiche le nombre de remplacements sans rien modifier. Je l'utilise systématiquement avant une migration, pour vérifier que je ne vais pas remplacer une chaîne qui apparaît aussi dans du contenu légitime.

## Gérer plugins, thèmes et utilisateurs en masse

- `wp plugin update --all` pour mettre à jour tous les plugins d'un coup, à combiner avec un `wp db export` préalable
- `wp plugin list --status=inactive --field=name` pour repérer les extensions désactivées qui traînent
- `wp user create` et `wp user update` pour créer ou modifier des comptes sans passer par l'écran utilisateurs
- `wp post list --post_type=page --format=csv` pour exporter rapidement une liste de contenus

Sur un parc de sites, ces commandes se combinent très bien avec un script qui boucle sur plusieurs installations et applique la même opération partout — je reviendrai sur cette approche dans un autre article consacré à l'administration d'un parc multi-sites.

## Le cache et la base, sans passer par l'admin

`wp cache flush` vide le cache d'objet quand un plugin de cache le supporte. `wp transient delete --all` nettoie les transients périmés, une opération que je fais systématiquement après une migration de thème. Et `wp db optimize` lance un `OPTIMIZE TABLE` sur toutes les tables — utile sur un site avec beaucoup de révisions accumulées.

```
wp post delete $(wp post list --post_type='revision' --format=ids) --force
```

Cette ligne combine deux commandes : la première liste les identifiants de toutes les révisions, la seconde les supprime définitivement. Sur un site de dix ans avec l'auto-save actif, j'ai déjà vu cette commande faire fondre une table `wp_posts` de plusieurs centaines de mégaoctets.

## Débuguer sans quitter le terminal

`wp eval` et `wp eval-file` permettent d'exécuter du PHP arbitraire dans le contexte de WordPress, avec accès à toutes les fonctions du cœur. C'est extrêmement pratique pour tester une fonction avant de l'intégrer dans du code, ou pour inspecter une valeur d'option :

```
wp eval 'var_dump( get_option( "siteurl" ) );'
wp option get siteurl
```

La deuxième ligne fait la même chose plus proprement, via `wp option get`, qui existe justement pour éviter d'écrire du PHP à la volée. Je garde `wp eval` pour les cas où aucune sous-commande dédiée n'existe.

> Sur chaque nouveau projet, je crée un fichier `wp-cli.yml` à la racine avec l'URL et le chemin par défaut. Ça évite de retaper `--path` et `--url` sur chaque commande, et ça réduit nettement le risque de se tromper de site en travaillant sur plusieurs projets en parallèle.

## En résumé

WP-CLI n'est pas réservé aux experts en ligne de commande : une dizaine de commandes suffisent à couvrir la majorité des tâches répétitives d'un développeur WordPress. Le vrai gain n'est pas seulement la vitesse d'exécution, c'est la possibilité de scripter, d'automatiser et de reproduire exactement la même opération sur dix sites différents sans en oublier un. Si vous ne deviez retenir que trois commandes pour commencer : `wp search-replace`, `wp plugin update --all` et `wp transient delete --all`.
