Retour au blog
Tutorielswp cli · wordpress

WP-CLI en 2026 : 30 commandes essentielles pour gérer WordPress en ligne de commande

Guide complet WP-CLI 2026 : installation, gestion des utilisateurs, base de données, plugins, thèmes, search-replace, cron, multisite, scripts d'automatisation. 30 commandes essentielles avec exemples concrets.

L'équipe Volade6 mai 202627 min de lecture
0 vues0 commentaires0 avis0 partages
Partager sur
WP-CLI 2026 : 30 commandes essentielles pour gérer WordPress en ligne de commande

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.


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.

CommandeDescriptionCas d'usage
wp user listLister tous les utilisateursAudit des comptes
wp user createCréer un utilisateurAjouter un collaborateur
wp user updateModifier un utilisateurChanger rôle, email
wp user deleteSupprimer un utilisateurNettoyage des comptes inactifs
wp user metaGérer les métadonnées utilisateurAjouter des champs personnalisés
wp user import-csvImporter des utilisateurs depuis CSVMigration ou création en masse
wp user sessionGérer les sessionsDéconnexion forcée
wp user reset-passwordRéinitialiser un mot de passeSupport client
wp user add-capAjouter une capacitéCustom roles
wp user remove-capRetirer 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.

CommandeDescriptionQuand l'utiliser
wp db queryExécuter une requête SQLRequête spécifique
wp db exportExporter la base de donnéesSauvegarde avant migration
wp db importImporter une base de donnéesRestauration
wp db optimizeOptimiser les tablesMaintenance mensuelle
wp db repairRéparer les tables corrompuesAprès incident
wp db sizeTaille de la base de donnéesDiagnostic performance
wp db tablesLister les tablesAudit structure
wp db checkVérifier l'intégrité des tablesMaintenance préventive
wp db cleanNettoyer les données orphelinesOptimisation 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

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.

CommandeDescription
wp plugin listLister tous les plugins avec statut
wp plugin installInstaller un plugin depuis le dépôt
wp plugin activateActiver un plugin
wp plugin deactivateDésactiver un plugin
wp plugin updateMettre à jour un ou tous les plugins
wp plugin deleteSupprimer un plugin
wp plugin uninstallDésinstaller complètement (données incluses)
wp plugin statusÉtat détaillé d'un plugin
wp plugin getInformations sur un plugin spécifique
wp plugin pathChemin 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.

CommandeDescription
wp theme listLister les thèmes installés
wp theme installInstaller un thème
wp theme activateActiver un thème
wp theme updateMettre à jour un thème
wp theme deleteSupprimer un thème
wp theme modGérer les modifications du thème
wp theme statusÉtat détaillé d'un thème
wp theme pathChemin 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

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

OptionDescriptionQuand l'utiliser
--dry-runSimuler sans appliquerVérifier les résultats avant exécution
--preciseForcer la casse exacteÉviter les faux positifs
--all-tablesParcourir toutes les tablesMigration complète
--skip-columnsIgnorer certaines colonnesÉviter les données sérialisées
--exportExporter les modifications en SQLAudit des changements
--networkAppliquer au réseau multisiteMigration de réseau
--skip-tablesIgnorer des tables spécifiquesProtéger certaines données
--include-columnsCibler des colonnes précisesRemplacement chirurgical
--formatFormat de sortie (table, json, csv)Export pour analyse
--regexUtiliser une expression régulièreRemplacement 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

ErreurSymptômeSolution
Données sérialisées corrompuesErreur "unserialize"Utiliser toujours wp search-replace, pas de SQL direct
Chaîne partielle dans les GUIDURLs cassées dans les flux RSSUtiliser --skip-columns=guid
Faux positifs dans les emailsRemplacement d'emails légitimesUtiliser --precise et vérifier avec --dry-run
Oubli des tables de cacheCache périmé après migrationwp cache flush après le search-replace
Sauts de ligne dans les URLsRemplacment incompletVé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.

CommandeDescription
wp cron event listLister les événements cron programmés
wp cron event runExécuter un événement cron
wp cron event schedulePlanifier un événement cron
wp cron event deleteSupprimer un événement cron
wp cron testTester 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

Administration du réseau multisite

Si on gère un réseau WordPress Multisite, WP-CLI devient indispensable pour administrer les sous-sites.

CommandeDescription
wp site listLister tous les sites du réseau
wp site createCréer un nouveau site
wp site deleteSupprimer un site
wp site optionGérer les options d'un site spécifique
wp site switchBasculer le contexte vers un site
wp site emptyVider un site (contenu)
wp site activateActiver un site
wp site deactivateDésactiver un site
wp site matureMarquer un site comme mature
wp site archiveArchiver 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 ==="

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

CommandeDescriptionUsage
wp core verify-checksumsVérifier l'intégrité des fichiers coreDétection de fichiers modifiés
wp user list --role=administratorLister les administrateursAudit des accès privilégiés
wp plugin status --allVérifier les statuts des pluginsDétection de plugins inactifs
wp db query "SHOW PROCESSLIST;"Voir les connexions DB activesDétection de ralentissements
wp option get admin_emailVérifier l'email adminSécurité des notifications
wp eval "echo ABSPATH;"Vérifier le chemin d'installationDé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.

CommandeMétriqueUsage
wp db sizeTaille de la baseOptimisation espace
wp db query "SHOW TABLE STATUS;"État des tablesFragmentation
wp eval "echo memory_get_usage();"Mémoire PHPTaille mémoire
wp eval "echo ABSPATH;"Chemin d'installationVérification
wp post list --format=countNombre d'articlesVolume 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

PratiquePourquoiComment
Toujours faire un --dry-runÉviter les catastrophes sur la DBwp search-replace ... --dry-run
Sauvegarder avant toute opération lourdeRollback possiblewp db export backup.sql
Tester sur un environnement de stagingValider avant productionScript de sync environnement
Documenter les scripts d'automatisationMaintenance facilitéeCommentaires dans les scripts
Utiliser les formats --json et --csvTraitement automatiséExport pour analyse

Erreurs fréquentes et dépannage

ErreurCause probableSolution
Error: Maximum execution time exceededOpération trop longue sur gros volumeAugmenter max_execution_time ou utiliser --skip-plugins
Error: Database connection errorMauvaises credentials dans wp-configVérifier DB_NAME, DB_USER, DB_PASSWORD
Error: This does not seem to be a WordPress installationMauvais --pathSpécifier le chemin absolu avec --path
Error: Cannot find a WP-CML packagePackage manquantwp package install le package nécessaire
Warning: One or more symlinks detectedPermissions de fichiersVé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.

Voir les extensionsVoir les tarifs V+
Gratuit pour commencerSans carte bancaireWordPress-firstMaintenu en 2026
Discussion

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é.

0

personnes ont partagé cet article

Partager sur

Sources & crédits

Documentation WordPress, tickets support Volade et tests terrain sur sites marchands.

#wp-cli#wordpress#commande-ligne#automation#administration#developpement#guide#2026

Ne manquez aucune sortie

Guides WordPress, WooCommerce et TikTok Shop — directement dans votre boîte mail.