WP-CLI est l'interface en ligne de commande officielle de WordPress. Lancé en 2011, il est devenu un outil indispensable pour les développeurs et les administrateurs qui gèrent plusieurs sites. En 2026, WP-CLI 2.11+ est installé par défaut sur la plupart des hébergements premium (Kinsta, WP Engine, RunCloud) et s'intègre nativement avec les workflows CI/CD.
Pourtant, beaucoup d'utilisateurs WordPress ne connaissent que 2-3 commandes de base. On a compilé les 30 commandes WP-CLI les plus utiles au quotidien, avec des exemples concrets et des scripts d'automatisation qui font gagner des heures chaque semaine.
Installation et mise à jour de WP-CLI
Avant d'aller plus loin, vérifions que WP-CLI est bien installé et à jour. En 2026, la version stable est la 2.11.x.
Vérifier l'installation
wp --info
Cette commande affiche la version de WP-CLI, le chemin d'installation, le shell utilisé et le chemin de WordPress. Si la commande wp n'est pas reconnue, il faut installer WP-CLI.
Installation (si non présent)
# Télécharger le phar
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
# Rendre exécutable
chmod +x wp-cli.phar
# Déplacer dans le PATH
sudo mv wp-cli.phar /usr/local/bin/wp
Installation via Composer ou Homebrew
# Via Composer (recommandé pour les projets)
composer require wp-cli/wp-cli
# Via Homebrew (macOS)
brew install wp-cli
Mise à jour vers la dernière version
# Mise à jour automatique
wp cli update
# Forcer la mise à jour même si même version
wp cli update --force
# Mise à jour vers une version spécifique
wp cli update --version=2.10.0
# Vérifier les versions disponibles
wp cli check-update
Installation des packages utiles
# Package de génération de contenu
wp package install wp-cli/entity-command
# Package de gestion des traductions
wp package install wp-cli/language-command
# Package d'évaluation des performances
wp package install wp-cli/eval-command
# Package de gestion des médias
wp package install wp-cli/media-command
Configuration du fichier .wp-cli/config.yml
# ~/.wp-cli/config.yml — configuration globale
path: /var/www/volade.com
url: https://volade.com
user: admin
skip-plugins:
- akismet
- hello
disabled_commands:
- db drop
Ce fichier permet de définir des valeurs par défaut pour éviter de les répéter dans chaque commande. On peut aussi configurer des alias pour les chemins fréquents.
Creez un compte Volade gratuit
Debloquez les ressources membres de cet article et le pack complet Volade.
Sans carte bancaire · Les checklists publiques restent gratuites.
Gestion des utilisateurs
Fini les allers-retours dans l'interface d'administration ou phpMyAdmin pour gérer les utilisateurs. WP-CLI rend les opérations rapides et scriptables.
| Commande | Description | Cas d'usage |
|---|---|---|
wp user list | Lister tous les utilisateurs | Audit des comptes |
wp user create | Créer un utilisateur | Ajouter un collaborateur |
wp user update | Modifier un utilisateur | Changer rôle, email |
wp user delete | Supprimer un utilisateur | Nettoyage des comptes inactifs |
wp user meta | Gérer les métadonnées utilisateur | Ajouter des champs personnalisés |
wp user import-csv | Importer des utilisateurs depuis CSV | Migration ou création en masse |
wp user session | Gérer les sessions | Déconnexion forcée |
wp user reset-password | Réinitialiser un mot de passe | Support client |
wp user add-cap | Ajouter une capacité | Custom roles |
wp user remove-cap | Retirer une capacité | Nettoyage ACL |
Créer un utilisateur
wp user create jdupont jdupont@exemple.com \
--role=editor \
--user_pass="motdepasse_securise" \
--display_name="Jean Dupont"
Lister les utilisateurs avec filtres
# Lister les administrateurs
wp user list --role=administrator --field=user_login
# Compter les utilisateurs par rôle
wp user list --role=subscriber --format=count
# Utilisateurs inactifs (pas de connexion depuis 90 jours)
wp user list --field=user_login --orderby=last_activity
# Utilisateurs inscrits depuis moins de 7 jours
wp user list --field=user_email --date_query="after=2026-07-06"
# Export CSV des utilisateurs avec métadonnées
wp user list --format=csv --fields=ID,user_login,user_email,display_name,roles > users-export.csv
Opérations en masse
# Changer le rôle de tous les abonnés en contributor
wp user list --role=subscriber --format=ids | xargs -I {} wp user update {} --role=contributor
# Supprimer les utilisateurs sans activité (attention, irréversible)
wp user list --field=ID | while read id; do
last=$(wp user meta get $id last_activity 2>/dev/null)
if [ -z "$last" ] || [ $(date -d "$last" +%s) -lt $(date -d "-6 months" +%s) ]; then
wp user delete $id --reassign=1
fi
done
# Ajouter un rôle custom à plusieurs utilisateurs
wp user list --role=subscriber --format=ids | while read id; do
wp user add-cap $id wp_edit_products
done
Gestion de la base de données
WP-CLI offre des commandes puissantes pour interagir directement avec la base de données WordPress, sans passer par phpMyAdmin ou Adminer.
| Commande | Description | Quand l'utiliser |
|---|---|---|
wp db query | Exécuter une requête SQL | Requête spécifique |
wp db export | Exporter la base de données | Sauvegarde avant migration |
wp db import | Importer une base de données | Restauration |
wp db optimize | Optimiser les tables | Maintenance mensuelle |
wp db repair | Réparer les tables corrompues | Après incident |
wp db size | Taille de la base de données | Diagnostic performance |
wp db tables | Lister les tables | Audit structure |
wp db check | Vérifier l'intégrité des tables | Maintenance préventive |
wp db clean | Nettoyer les données orphelines | Optimisation espace |
Sauvegarde et restauration
# Exporter avec compression
wp db export backup-$(date +%Y%m%d).sql
# Exporter uniquement certaines tables (ex: woocommerce)
wp db export --tables="wp_posts,wp_postmeta,wp_wc_*" wc-backup.sql
# Exporter avec exclusion de tables
wp db export --exclude_tables="wp_options,wp_usermeta" light-backup.sql
# Restaurer
wp db import backup-20260719.sql
# Restaurer depuis un fichier compressé
zcat backup-20260719.sql.gz | wp db import -
Requêtes utiles au quotidien
# Compter les articles par type de publication
wp db query "SELECT post_type, COUNT(*) FROM wp_posts WHERE post_status='publish' GROUP BY post_type;"
# Trouver les options orphelines (transients expirés)
wp db query "DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_value < UNIX_TIMESTAMP();"
# Taille des tables
wp db size --size_format=mb
# Trouver les utilisateurs avec des rôles invalides
wp db query "SELECT user_id, meta_value FROM wp_usermeta WHERE meta_key='wp_capabilities' AND meta_value NOT LIKE '%administrator%' AND meta_value NOT LIKE '%editor%';"
# Compter les commentaires en attente
wp db query "SELECT COUNT(*) as spam_count FROM wp_comments WHERE comment_approved='spam';"
# Vérifier la taille des posts avec beaucoup de révisions
wp db query "SELECT post_parent, COUNT(*) as revisions FROM wp_posts WHERE post_type='revision' GROUP BY post_parent ORDER BY revisions DESC LIMIT 10;"
Optimisation et maintenance
# Optimiser toutes les tables
wp db optimize
# Réparer les tables si nécessaire
wp db repair
# Nettoyer les révisions d'articles
wp post list --post_type='revision' --format=ids --posts_per_page=-1 | xargs -I {} wp post delete {} --force
# Compter les révisions avant nettoyage
wp db query "SELECT COUNT(*) FROM wp_posts WHERE post_type='revision';"
# Nettoyer le cache des options
wp db query "DELETE FROM wp_options WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%';"
# Nettoyer les spams
wp comment delete $(wp comment list --status=spam --format=ids) --force
Creez un compte Volade gratuit
Debloquez les ressources membres de cet article et le pack complet Volade.
Sans carte bancaire · Les checklists publiques restent gratuites.
Gestion des plugins
Installer, activer, désactiver ou mettre à jour des plugins par lots est beaucoup plus rapide en ligne de commande que dans l'interface WordPress.
| Commande | Description |
|---|---|
wp plugin list | Lister tous les plugins avec statut |
wp plugin install | Installer un plugin depuis le dépôt |
wp plugin activate | Activer un plugin |
wp plugin deactivate | Désactiver un plugin |
wp plugin update | Mettre à jour un ou tous les plugins |
wp plugin delete | Supprimer un plugin |
wp plugin uninstall | Désinstaller complètement (données incluses) |
wp plugin status | État détaillé d'un plugin |
wp plugin get | Informations sur un plugin spécifique |
wp plugin path | Chemin d'installation d'un plugin |
Installation et activation par lots
# Installer plusieurs plugins en une commande
wp plugin install wordfence yoast woocommerce --activate
# Activer tous les plugins
wp plugin activate --all
# Désactiver tous les plugins (débogage)
wp plugin deactivate --all
# Installer un plugin depuis une URL ZIP
wp plugin install https://exemple.com/plugin-custom.zip
# Installer depuis un dépot GitHub
wp plugin install https://github.com/auteur/plugin --activate
Mises à jour et maintenance
# Mettre à jour tous les plugins
wp plugin update --all
# Simulation de mise à jour (dry-run)
wp plugin update --all --dry-run
# Vérifier les plugins qui ont des mises à jour disponibles
wp plugin list --update=available --field=name
# Désactiver les plugins inutilisés
wp plugin list --status=inactive --field=name | xargs -I {} wp plugin delete {}
# Mettre à jour un plugin spécifique
wp plugin update woocommerce --minor
# Voir le changelog avant mise à jour
wp plugin get woocommerce --field=version
Recherche de plugins vulnérables
# Vérifier la compatibilité PHP (nécessite package)
wp plugin list --field=name | while read plugin; do
version=$(wp plugin get $plugin --field=version)
echo "$plugin: $version"
done
# Vérifier les plugins avec des avis négatifs
wp plugin search woocommerce --per-page=5 --fields=name,rating
# Audit des plugins inutilisés depuis 6 mois
wp plugin list --field=name --status=inactive | while read plugin; do
last_updated=$(wp plugin get $plugin --field=last_updated)
echo "$plugin: dernière mise à jour $last_updated"
done
Gestion des thèmes
Même principe que pour les plugins, mais appliqué aux thèmes.
| Commande | Description |
|---|---|
wp theme list | Lister les thèmes installés |
wp theme install | Installer un thème |
wp theme activate | Activer un thème |
wp theme update | Mettre à jour un thème |
wp theme delete | Supprimer un thème |
wp theme mod | Gérer les modifications du thème |
wp theme status | État détaillé d'un thème |
wp theme path | Chemin du thème actif |
Nettoyage des thèmes inutilisés
# Lister les thèmes inactifs
wp theme list --status=inactive --field=name
# Supprimer tous les thèmes inactifs sauf Twenty Twenty-Six
wp theme list --status=inactive --field=name | grep -v "twentytwentysix" | xargs -I {} wp theme delete {}
# Supprimer les thèmes inactifs avec option --force
wp theme list --status=inactive --format=ids | xargs -I {} wp theme delete {} --force
Changer de thème en ligne de commande
# Basculer vers un thème de secours
wp theme activate twentytwentysix
# Basculer avec vérification des dépendances
wp theme activate mon-theme && wp plugin status mon-plugin
# Changer le thème enfant tout en gardant le thème parent
wp theme activate mon-theme-child
Creez un compte Volade gratuit
Debloquez les ressources membres de cet article et le pack complet Volade.
Sans carte bancaire · Les checklists publiques restent gratuites.
Search-Replace : la commande la plus puissante
La commande wp search-replace est utilisée pour remplacer des chaînes dans la base de données. Indispensable lors des migrations (changement de domaine, passage en HTTPS, changement de URL).
Syntaxe de base
wp search-replace "ancien-domaine.com" "nouveau-domaine.com"
Options essentielles
| Option | Description | Quand l'utiliser |
|---|---|---|
--dry-run | Simuler sans appliquer | Vérifier les résultats avant exécution |
--precise | Forcer la casse exacte | Éviter les faux positifs |
--all-tables | Parcourir toutes les tables | Migration complète |
--skip-columns | Ignorer certaines colonnes | Éviter les données sérialisées |
--export | Exporter les modifications en SQL | Audit des changements |
--network | Appliquer au réseau multisite | Migration de réseau |
--skip-tables | Ignorer des tables spécifiques | Protéger certaines données |
--include-columns | Cibler des colonnes précises | Remplacement chirurgical |
--format | Format de sortie (table, json, csv) | Export pour analyse |
--regex | Utiliser une expression régulière | Remplacement avancé |
Exemples concrets
# Migration de préprod vers prod (avec dry-run d'abord)
wp search-replace "preprod.volade.com" "volade.com" --dry-run
wp search-replace "preprod.volade.com" "volade.com" --all-tables
# Remplacer une URL dans le contenu uniquement
wp search-replace "http://volade.com" "https://volade.com" wp_posts wp_postmeta
# Remplacer avec export des modifications
wp search-replace "ancien-email@exemple.com" "nouvel-email@exemple.com" --export=changes.sql
# Remplacer avec expression régulière
wp search-replace "([0-9]{5})" "75$1" --regex --all-tables --dry-run
# Remplacer dans les options uniquement
wp search-replace "ancien-site" "nouveau-site" wp_options --format=table
Attention aux données sérialisées
WP-CLI gère automatiquement les données sérialisées de WordPress (contrairement à une requête SQL directe). On peut le vérifier :
wp search-replace "ancien.com" "nouveau.com" --all-tables --dry-run --report-changed-only
Erreurs courantes avec search-replace
| Erreur | Symptôme | Solution |
|---|---|---|
| Données sérialisées corrompues | Erreur "unserialize" | Utiliser toujours wp search-replace, pas de SQL direct |
| Chaîne partielle dans les GUID | URLs cassées dans les flux RSS | Utiliser --skip-columns=guid |
| Faux positifs dans les emails | Remplacement d'emails légitimes | Utiliser --precise et vérifier avec --dry-run |
| Oubli des tables de cache | Cache périmé après migration | wp cache flush après le search-replace |
| Sauts de ligne dans les URLs | Remplacment incomplet | Vérifier avec --format=table |
Gestion du cron WordPress
Le cron WordPress est déclenché à chaque visite. En production, on le désactive souvent pour le remplacer par un cron système.
| Commande | Description |
|---|---|
wp cron event list | Lister les événements cron programmés |
wp cron event run | Exécuter un événement cron |
wp cron event schedule | Planifier un événement cron |
wp cron event delete | Supprimer un événement cron |
wp cron test | Tester si le cron WordPress fonctionne |
wp cron event list --past-due | Événements en retard |
Voir les événements cron
# Lister tous les événements cron
wp cron event list
# Événements en retard (non exécutés)
wp cron event list --past-due
# Compter les événements cron par hook
wp cron event list --fields=hook,next_run,schedule --format=table
# Voir les événements planifiés dans les 24h
wp cron event list --fields=hook,next_run --format=json | ConvertFrom-Json | Where-Object { $_.next_run -lt (Get-Date).AddDays(1) }
Exécution manuelle des tâches cron
# Exécuter tous les événements en retard
wp cron event run --due-now
# Exécuter un événement spécifique
wp cron event run woocommerce_scheduled_sales
# Exécuter le cron système à la place du cron WordPress
# Dans crontab : * * * * * wp cron event run --due-now --path=/chemin/vers/wordpress
# Planifier un événement personnalisé
wp cron event schedule mon_evenement daily
Dépannage du cron WordPress
# Vérifier si le cron système est configuré
wp cron test
# Forcer l'exécution du cron même si verrouillé
wp cron event run --due-now --force
# Désactiver le cron WordPress et activer le cron système
wp config set DISABLE_WP_CRON true --raw
# Puis ajouter dans crontab : * * * * * wget -q -O - https://votresite.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
Creez un compte Volade gratuit
Debloquez les ressources membres de cet article et le pack complet Volade.
Sans carte bancaire · Les checklists publiques restent gratuites.
Administration du réseau multisite
Si on gère un réseau WordPress Multisite, WP-CLI devient indispensable pour administrer les sous-sites.
| Commande | Description |
|---|---|
wp site list | Lister tous les sites du réseau |
wp site create | Créer un nouveau site |
wp site delete | Supprimer un site |
wp site option | Gérer les options d'un site spécifique |
wp site switch | Basculer le contexte vers un site |
wp site empty | Vider un site (contenu) |
wp site activate | Activer un site |
wp site deactivate | Désactiver un site |
wp site mature | Marquer un site comme mature |
wp site archive | Archiver un site |
Opérations multisite courantes
# Créer un site dans le réseau
wp site create --slug=nouveau-site --title="Nouveau Site" --email=admin@exemple.com
# Lister tous les sites avec leurs métadonnées
wp site list --fields=blog_id,url,site_name,registered --format=table
# Supprimer un site (avec les tables)
wp site delete 5 --drop-tables
# Activer un plugin sur tous les sites du réseau
wp plugin activate woocommerce --network
# Mettre à jour les options sur tous les sites
wp site list --field=url | while read url; do
wp option get siteurl --url=$url
done
# Compter les articles par site dans le réseau
wp site list --field=url | while read url; do
count=$(wp post list --post_type=post --posts_per_page=-1 --format=count --url=$url)
echo "$url: $count articles"
done
# Désactiver un plugin sur un site spécifique
wp plugin deactivate akismet --url=monsite.volade.com
Scripts d'automatisation
Là où WP-CLI devient vraiment puissant, c'est quand on combine les commandes dans des scripts. Voici quelques scripts qu'on utilise en production.
Script de maintenance hebdomadaire
#!/bin/bash
# maintenance-wp.sh - Script de maintenance automatisée
SITE_PATH="/var/www/volade.com"
BACKUP_PATH="/backups/wordpress"
DATE=$(date +%Y%m%d)
cd $SITE_PATH
# 1. Sauvegarde de la base de données
wp db export $BACKUP_PATH/db-$DATE.sql
gzip $BACKUP_PATH/db-$DATE.sql
# 2. Mise à jour des plugins
wp plugin update --all
# 3. Mise à jour des thèmes
wp theme update --all
# 4. Nettoyage des révisions
wp post list --post_type='revision' --format=ids --posts_per_page=-1 | xargs -I {} wp post delete {} --force
# 5. Optimisation de la base
wp db optimize
# 6. Nettoyage du cache
wp cache flush
# 7. Rapport
echo "Maintenance terminée le $(date)" >> $BACKUP_PATH/maintenance.log
Script de déploiement (Git vers Production)
#!/bin/bash
# deploy.sh - Déploiement automatisé
BRANCH=$1
SITE_PATH="/var/www/volade.com"
if [ -z "$BRANCH" ]; then
BRANCH="main"
fi
cd $SITE_PATH
# 1. Mode maintenance
wp maintenance-mode activate
# 2. Pull du code
git pull origin $BRANCH
# 3. Sauvegarde de la base (pre-deploy)
wp db export /backups/pre-deploy-$(date +%s).sql
# 4. Mise à jour de la base (si thème/blocs)
wp core update-db
# 5. Mises à jour des plugins
wp plugin update --all
# 6. Nettoyage du cache
wp cache flush
# 7. Désactiver maintenance
wp maintenance-mode deactivate
echo "Deploiement reussi depuis la branche $BRANCH"
Script d'audit de sécurité
#!/bin/bash
# audit.sh - Audit de sécurité automatisé
echo "=== Audit WordPress : $(date) ==="
# Version WordPress
echo "Version WordPress : $(wp core version)"
# Utilisateurs administrateurs
echo "Administrateurs :"
wp user list --role=administrator --field=user_login
# Plugins avec statut
echo "Plugins actifs :"
wp plugin list --status=active --field=name
# Dernières tentatives de connexion
wp db query "SELECT user_login, user_email FROM wp_users WHERE id IN (SELECT user_id FROM wp_usermeta WHERE meta_key='last_activity' AND meta_value > $(date -d '-7 days' +%s));"
# Vérification des hash de fichiers
wp core verify-checksums
# Vérification des permissions de fichiers
echo "Permissions suspectes :"
find . -type f -perm 777 2>/dev/null
echo "=== Audit termine ==="
Script de backup multi-sites
#!/bin/bash
# backup-multi.sh - Backup automatisé de plusieurs sites
SITES=(
"/var/www/site1.com"
"/var/www/site2.com"
"/var/www/site3.com"
)
BACKUP_ROOT="/backups"
for SITE in "${SITES[@]}"; do
TIMESTAMP=$(date +%Y%m%d-%H%M)
SITE_NAME=$(basename $SITE)
echo "Backup de $SITE_NAME..."
cd $SITE
# Backup DB
wp db export $BACKUP_ROOT/$SITE_NAME/db-$TIMESTAMP.sql
gzip $BACKUP_ROOT/$SITE_NAME/db-$TIMESTAMP.sql
# Backup files (uploads, themes, plugins)
tar czf $BACKUP_ROOT/$SITE_NAME/files-$TIMESTAMP.tar.gz wp-content/uploads
# Backup config
cp wp-config.php $BACKUP_ROOT/$SITE_NAME/config-$TIMESTAMP.php
echo "Backup $SITE_NAME terminé"
# Rétention : garder les 7 derniers backups
ls -t $BACKUP_ROOT/$SITE_NAME/db-*.sql.gz | tail -n +8 | xargs rm -f
done
Script de synchronisation entre environnements
#!/bin/bash
# sync-env.sh - Synchronisation DB entre environnements
FROM_ENV=$1
TO_ENV=$2
FROM_PATH="/var/www/$FROM_ENV"
TO_PATH="/var/www/$TO_ENV"
DUMP_FILE="/tmp/sync-$FROM_ENV-to-$TO_ENV.sql"
# Exporter la DB source
cd $FROM_PATH
wp db export $DUMP_FILE
# Remplacer les URLs
FROM_URL=$(wp option get siteurl)
cd $TO_PATH
TO_URL=$(wp option get siteurl)
# Mode maintenance sur la cible
wp maintenance-mode activate
# Importer et remplacer
wp db import $DUMP_FILE
wp search-replace "$FROM_URL" "$TO_URL" --all-tables
# Nettoyage
wp cache flush
wp maintenance-mode deactivate
rm $DUMP_FILE
echo "Synchronisation $FROM_ENV -> $TO_ENV terminée"
Script de vérification post-déploiement
#!/bin/bash
# verify-deploy.sh - Vérification post-déploiement
echo "=== Verification post-deploiement ==="
# 1. Vérifier que le site répond
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" https://volade.com)
if [ "$HTTP_CODE" != "200" ]; then
echo "ERREUR: HTTP $HTTP_CODE"
exit 1
fi
# 2. Vérifier les erreurs dans les logs
ERRORS=$(wp db query "SELECT COUNT(*) FROM wp_options WHERE option_name LIKE '%error%'")
echo "Erreurs dans les logs: $ERRORS"
# 3. Vérifier que tous les plugins sont actifs
INACTIVE=$(wp plugin list --status=inactive --format=count)
if [ "$INACTIVE" -gt 0 ]; then
echo "ATTENTION: $INACTIVE plugins inactifs"
fi
# 4. Vérifier les checksums des fichiers core
wp core verify-checksums || echo "ATTENTION: Fichiers core modifies"
echo "=== Verification terminee ==="
Creez un compte Volade gratuit
Debloquez les ressources membres de cet article et le pack complet Volade.
Sans carte bancaire · Les checklists publiques restent gratuites.
Intégration CI/CD avec WP-CLI
WP-CLI s'intègre nativement dans les pipelines CI/CD pour automatiser les tâches de déploiement et de maintenance.
Exemple GitHub Actions
# .github/workflows/deploy.yml
name: Deploy WordPress
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.SSH_KEY }}" > ~/.ssh/id_rsa
chmod 600 ~/.ssh/id_rsa
- name: Deploy with WP-CLI
run: |
ssh user@server "cd /var/www/volade.com && \
git pull origin main && \
wp maintenance-mode activate && \
wp plugin update --all && \
wp theme update --all && \
wp core update-db && \
wp cache flush && \
wp maintenance-mode deactivate"
Exemple GitLab CI
# .gitlab-ci.yml
image: wordpress:cli
stages:
- deploy
deploy-prod:
stage: deploy
script:
- wp plugin update --all --path=/var/www/volade.com
- wp theme update --all --path=/var/www/volade.com
- wp db optimize --path=/var/www/volade.com
- wp cache flush --path=/var/www/volade.com
only:
- main
Exemple avec Deployer (PHP)
// deploy.php — Deployer recipe avec WP-CLI
task('deploy:wp-cli', function () {
run('cd {{release_path}} && wp plugin update --all');
run('cd {{release_path}} && wp theme update --all');
run('cd {{release_path}} && wp core update-db');
run('cd {{release_path}} && wp cache flush');
});
Développement de commandes WP-CLI personnalisées
Pour les besoins spécifiques, on peut créer ses propres commandes WP-CLI.
Structure d'une commande personnalisée
<?php
/**
* Commandes personnalisées pour la maintenance Volade
*
* ## EXAMPLES
*
* wp volade report
* wp volade cleanup --days=30
*
* @package Volade
* @subpackage CLI
*/
class Volade_CLI_Command {
/**
* Générer un rapport de santé du site
*
* ## OPTIONS
*
* [--format=<format>]
* : Format de sortie (table, json, csv)
* ---
* default: table
* options:
* - table
* - json
* - csv
* ---
*/
public function report( $args, $assoc_args ) {
$format = $assoc_args['format'] ?? 'table';
$data = array(
array(
'metric' => 'Version WP',
'value' => WP_CLI::run_command( array( 'core', 'version' ), array() ),
),
array(
'metric' => 'Plugins actifs',
'value' => count( get_option( 'active_plugins' ) ),
),
array(
'metric' => 'Articles publiés',
'value' => wp_count_posts()->publish,
),
);
WP_CLI\Utils\format_items( $format, $data, array( 'metric', 'value' ) );
}
/**
* Nettoyer les données obsolètes
*
* ## OPTIONS
*
* [--days=<days>]
* : Âge maximum des données à garder
* ---
* default: 30
* ---
*
* [--dry-run]
* : Simuler sans supprimer
*/
public function cleanup( $args, $assoc_args ) {
$days = intval( $assoc_args['days'] ?? 30 );
$dry_run = isset( $assoc_args['dry-run'] );
$date_limit = date( 'Y-m-d', strtotime( "-{$days} days" ) );
if ( $dry_run ) {
WP_CLI::line( "Simulation: nettoyage des donnees anterieures au {$date_limit}" );
}
// Nettoyer les transients expirés
$transients = $GLOBALS['wpdb']->get_var( $GLOBALS['wpdb']->prepare(
"DELETE FROM {$GLOBALS['wpdb']->options} WHERE option_name LIKE '_transient_%' AND option_value < %d",
time()
));
if ( $dry_run ) {
WP_CLI::success( "{$transients} transients a nettoyer" );
} else {
WP_CLI::success( "{$transients} transients nettoies" );
}
}
}
WP_CLI::add_command( 'volade', 'Volade_CLI_Command' );
Installation de la commande personnalisée
# Placer le fichier dans wp-content/plugins/volade-cli/volade-cli.php
# Activer le plugin
wp plugin activate volade-cli
# Tester la commande
wp volade report
wp volade cleanup --dry-run
wp volade cleanup --days=60
Commandes de sécurité essentielles
| Commande | Description | Usage |
|---|---|---|
wp core verify-checksums | Vérifier l'intégrité des fichiers core | Détection de fichiers modifiés |
wp user list --role=administrator | Lister les administrateurs | Audit des accès privilégiés |
wp plugin status --all | Vérifier les statuts des plugins | Détection de plugins inactifs |
wp db query "SHOW PROCESSLIST;" | Voir les connexions DB actives | Détection de ralentissements |
wp option get admin_email | Vérifier l'email admin | Sécurité des notifications |
wp eval "echo ABSPATH;" | Vérifier le chemin d'installation | Détection d'inclusion malveillante |
Audit de sécurité complet
#!/bin/bash
# full-security-audit.sh
echo "=== Audit de securite WordPress ==="
# 1. Version WordPress
echo "1. Version WordPress : $(wp core version)"
# 2. Vérification des checksums
echo "2. Verification des checksums..."
wp core verify-checksums 2>/dev/null || echo " Fichiers Core modifies !"
# 3. Utilisateurs suspects
echo "3. Utilisateurs administrateurs :"
wp user list --role=administrator --field=user_login
# 4. Dernières connexions échouées
echo "4. Dernieres tentatives de connexion echouees :"
wp db query "SELECT COUNT(*) as failed FROM wp_options WHERE option_name LIKE 'wp_log_%'" 2>/dev/null
# 5. Fichiers modifiés récemment
echo "5. Fichiers PHP modifies recemment :"
find . -name "*.php" -type f -mtime -7 | head -20
# 6. Permissions des fichiers de configuration
echo "6. Permissions wp-config.php :"
ls -la wp-config.php
# 7. Thèmes et plugins non mis à jour
echo "7. Mises a jour disponibles :"
wp plugin list --update=available --field=name
wp theme list --update=available --field=name
Performance benchmarking avec WP-CLI
On peut utiliser WP-CLI pour mesurer les performances du site et identifier les goulots d'étranglement.
| Commande | Métrique | Usage |
|---|---|---|
wp db size | Taille de la base | Optimisation espace |
wp db query "SHOW TABLE STATUS;" | État des tables | Fragmentation |
wp eval "echo memory_get_usage();" | Mémoire PHP | Taille mémoire |
wp eval "echo ABSPATH;" | Chemin d'installation | Vérification |
wp post list --format=count | Nombre d'articles | Volume de contenu |
# Benchmark des temps de requête
echo "Temps de chargement:"
time wp post list --posts_per_page=1 > /dev/null 2>&1
# Taille de la base par table
wp db query "SELECT table_name, ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size (MB)' FROM information_schema.TABLES WHERE table_schema = DATABASE() ORDER BY (data_length + index_length) DESC;"
# Nombre total de révisions
wp post list --post_type='revision' --format=count
# Vérifier les options transients obsolètes
wp db query "SELECT COUNT(*) FROM wp_options WHERE option_name LIKE '_transient_%';"
Optimisations et bonnes pratiques
Alias et configurations
# Créer un alias pour les commandes fréquentes
alias wpmaint="wp plugin update --all --dry-run && wp theme update --all --dry-run"
alias wpbackup="wp db export ~/backups/wordpress/db-$(date +%Y%m%d).sql"
alias wpclean="wp post list --post_type='revision' --format=ids --posts_per_page=-1 | xargs -I {} wp post delete {} --force"
# Configuration du fichier .wp-cli/config.yml
echo "path: /var/www/volade.com
url: https://volade.com
user: admin
skip-plugins:
- akismet
- hello" > ~/.wp-cli/config.yml
Bonnes pratiques générales
| Pratique | Pourquoi | Comment |
|---|---|---|
| Toujours faire un --dry-run | Éviter les catastrophes sur la DB | wp search-replace ... --dry-run |
| Sauvegarder avant toute opération lourde | Rollback possible | wp db export backup.sql |
| Tester sur un environnement de staging | Valider avant production | Script de sync environnement |
| Documenter les scripts d'automatisation | Maintenance facilitée | Commentaires dans les scripts |
| Utiliser les formats --json et --csv | Traitement automatisé | Export pour analyse |
Erreurs fréquentes et dépannage
| Erreur | Cause probable | Solution |
|---|---|---|
Error: Maximum execution time exceeded | Opération trop longue sur gros volume | Augmenter max_execution_time ou utiliser --skip-plugins |
Error: Database connection error | Mauvaises credentials dans wp-config | Vérifier DB_NAME, DB_USER, DB_PASSWORD |
Error: This does not seem to be a WordPress installation | Mauvais --path | Spécifier le chemin absolu avec --path |
Error: Cannot find a WP-CML package | Package manquant | wp package install le package nécessaire |
Warning: One or more symlinks detected | Permissions de fichiers | Vérifier les permissions et les propriétaires |
FAQ — WP-CLI WordPress 2026
Comment installer WP-CLI sur mon serveur ?
Telechargez le phar depuis https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar, rendez-le executable (chmod +x), et deplacez-le dans /usr/local/bin/wp. La plupart des hebergements premium l'ont pre-installe.
WP-CLI fonctionne-t-il sous Windows ?
Oui, via PowerShell ou WSL (Windows Subsystem for Linux). L'installation se fait avec le telechargement du phar. Certaines commandes bash (pipes, xargs) necessitent WSL pour fonctionner pleinement.
Le search-replace de WP-CLI gere-t-il les donnees serialisees ?
Oui, WP-CLI gere automatiquement les donnees serialisees, contrairement a une requete SQL directe. C'est pourquoi on doit toujours utiliser wp search-replace plutot que UPDATE wp_options SET option_value = REPLACE(...) pour les migrations.
Comment automatiser les sauvegardes avec WP-CLI ?
Creez un script bash qui combine wp db export et gzip, puis ajoutez-le au crontab systeme. On recommande une sauvegarde quotidienne avec retention sur 7 jours.
Peut-on executer WP-CLI sans etre dans le repertoire WordPress ?
Oui, avec l'option --path=/chemin/vers/wordpress. On configure aussi un fichier ~/.wp-cli/config.yml avec le chemin par defaut pour eviter de le specifier a chaque commande.
Quels sont les risques du search-replace ?
Toujours utiliser --dry-run en premier pour voir les changements sans les appliquer. Sur les tables d'options, un mauvais search-replace peut casser le site. WP-CLI gere les donnees serialisees mais une verification prealable reste recommandee.
WP-CLI peut-il gerer un reseau multisite ?
Oui, avec des commandes dediees comme wp site list, wp site create et l'option --network pour les plugins et themes. L'option --url permet de cibler un sous-site specifique.
Comment mettre a jour WP-CLI lui-meme ?
wp cli update met a jour WP-CLI vers la derniere version stable. wp cli update --nightly pour la version de developpement. wp cli check-update pour verifier si une mise a jour est disponible.
WP-CLI ralentit-il mon serveur ?
Non, WP-CLI s'execute en ligne de commande sans interface web. Les commandes sont generalement rapides (quelques secondes). Les operations lourdes (import, search-replace sur gros volumes) peuvent prendre plus de temps mais ne bloquent pas les visiteurs.
Quelles commandes WP-CLI sont les plus utilisees au quotidien ?
wp plugin update --all, wp db export, wp search-replace, wp user list, wp post list, wp cache flush, wp core update et wp cron event run. Ces 8 commandes couvrent 80% des besoins quotidiens d'administration WordPress.
Comment creer une commande WP-CLI personnalisee ?
Il faut creer un plugin PHP qui definit une classe avec des methodes publiques, puis enregistrer la commande avec WP_CLI::add_command(). Le plugin doit etre active pour que les commandes soient disponibles.
Quelle est la difference entre wp db export et wp db query ?
wp db export cree un fichier SQL complet de la base, ideal pour les sauvegardes. wp db query execute une requete SQL specifique et retourne le resultat dans le terminal, ideal pour les analyses ponctuelles.
Comment restaurer une base de donnees avec WP-CLI ?
Utilisez wp db import backup.sql. Si le fichier est compresse, utilisez zcat backup.sql.gz | wp db import -. Il est recommande de faire un backup de la base actuelle avant la restauration.
Peut-on gerer les posts et les pages avec WP-CLI ?
Oui, avec wp post list, wp post create, wp post update, wp post delete. On peut aussi gerer les termes de taxonomie avec wp term, les commentaires avec wp comment, et les medias avec wp media.
Comment debugguer un site WordPress avec WP-CLI ?
Activez le debug avec wp config set WP_DEBUG true --raw, activez les logs avec wp config set WP_DEBUG_LOG true --raw, puis surveillez les logs avec tail -f wp-content/debug.log.
Pret a passer a l'action ?
Explorez le catalogue Volade — sans compte pour commencer.
Votre avis compte
Commentez « WP-CLI en 2026 : 30 commandes essentielles pour gérer WordPress en ligne de commande » ou notez cet article pour aider la communauté.
personnes ont partagé cet article