📝 WordPress

WP-CLI : WordPress en ligne de commande

Administrer WordPress depuis le terminal : installer WP-CLI, commandes essentielles, scripts de maintenance, migration de domaine avec search-replace.

intermédiaire ⏱ 15 min Mise à jour : 2026-04-23

WP-CLI est l'outil en ligne de commande officiel de WordPress. Il fait absolument tout ce que fait l'interface graphique — et plus vite, de façon scriptable, sans charger le front. Pour un développeur ou un admin qui gère plusieurs sites, c'est l'outil incontournable.

Vérifier qu'il est installé

Sur nos hébergements Plesk et sur nos VPS Debian/Ubuntu, WP-CLI est pré-installé. Connectez-vous en SSH et lancez :

wp --info

Vous devriez voir une sortie du type :

OS:    Linux 6.1.0-x86_64
PHP binary:     /usr/bin/php8.3
PHP version:    8.3.x
WP-CLI version: 2.11.0

Installation manuelle (VPS sans WP-CLI)

Si wp --info renvoie command not found :

curl -O https://raw.githubusercontent.com/wp-cli/wp-cli/gh-pages/phar/wp-cli.phar
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

wp --info
💡
Toujours se placer dans la racine WordPress
WP-CLI doit être lancé depuis le dossier contenant wp-config.php, sinon il ne sait pas quel site gérer. Sur Plesk : cd /var/www/vhosts/mon-domaine.fr/httpdocs. Alternative : utiliser le flag --path=.

Commandes essentielles

Core WordPress

# Version installée
wp core version

# Vérifier l'intégrité des fichiers core
wp core verify-checksums

# Mettre à jour WordPress
wp core update

# Mettre à jour la base de données après une maj
wp core update-db

# Télécharger une version spécifique (sans l'installer)
wp core download --version=6.5.3 --locale=fr_FR --force

Plugins

# Lister tous les plugins (actifs + inactifs)
wp plugin list

# Seulement les actifs
wp plugin list --status=active

# Installer et activer
wp plugin install wordfence --activate

# Tout mettre à jour
wp plugin update --all

# Simulation : voir ce qui serait mis à jour, sans rien faire
wp plugin update --all --dry-run

# Désactiver un plugin
wp plugin deactivate nom-plugin

# Supprimer (désactive d'abord si nécessaire)
wp plugin delete nom-plugin

# Désactiver tous les plugins (debug)
wp plugin deactivate --all

Thèmes

wp theme list
wp theme activate twentytwentyfour
wp theme update --all
wp theme delete nom-theme

Utilisateurs

# Lister
wp user list --fields=ID,user_login,user_email,roles

# Créer un admin
wp user create marie marie@exemple.fr --role=administrator --send-email

# Changer le mot de passe
wp user update 42 --user_pass='NouveauMotDePasseFort'

# Supprimer en réattribuant les contenus
wp user delete ancien-admin --reassign=2

Base de données

# Exporter la BDD en SQL (nom du fichier auto)
wp db export

# Nom de fichier précis + compression
wp db export backup-$(date +%Y%m%d).sql

# Importer
wp db import backup-20260423.sql

# Console MySQL interactive
wp db cli

# Optimiser (équivalent phpMyAdmin optimize)
wp db optimize

# Taille de la base
wp db size --tables

Search-replace (migration de domaine)

La commande la plus utile de WP-CLI. Remplace toutes les occurrences d'une chaîne dans la base, y compris dans les données sérialisées PHP (impossible avec un simple sed).

# Simulation — TOUJOURS commencer par ça
wp search-replace 'https://ancien-domaine.fr' 'https://nouveau-domaine.fr' --dry-run

# Exécution réelle
wp search-replace 'https://ancien-domaine.fr' 'https://nouveau-domaine.fr' --all-tables --skip-columns=guid

# Avec export SQL de sécurité avant
wp db export avant-migration.sql && \
  wp search-replace 'ancien-domaine.fr' 'nouveau-domaine.fr' --all-tables --skip-columns=guid

--skip-columns=guid est important : le champ guid ne doit jamais être modifié (il identifie de manière unique les posts pour les flux RSS).

Options et métadonnées

wp option get siteurl
wp option update siteurl 'https://mon-domaine.fr'
wp option get blogname

# Mettre à jour une option complexe (JSON)
wp option update woocommerce_tax_rates '{"fr":20}' --format=json

Cache

# Vider le cache objet (transients, cache)
wp cache flush

# Supprimer les transients expirés
wp transient delete --expired

# Tout supprimer
wp transient delete --all

Cron WordPress

# Lister les tâches WP-Cron
wp cron event list

# Exécuter toutes les tâches dues
wp cron event run --due-now

# Lancer une tâche spécifique
wp cron event run wp_version_check

Couplé avec un vrai cron système, ça donne la méthode propre pour déclencher WP-Cron (voir le guide crons) :

*/5 * * * * cd /var/www/vhosts/mon-domaine.fr/httpdocs && /usr/bin/wp cron event run --due-now > /dev/null 2>&1

Scripts utiles

Maintenance hebdomadaire

Fichier /home/monuser/bin/wp-weekly.sh :

#!/bin/bash
set -euo pipefail

SITE=/var/www/vhosts/mon-domaine.fr/httpdocs
LOG=/home/monuser/logs/wp-weekly.log

cd "$SITE"

{
  echo "=== $(date -Iseconds) — maintenance hebdo ==="
  wp core update
  wp plugin update --all
  wp theme update --all
  wp core update-db
  wp db optimize
  wp transient delete --expired
  wp cache flush
  echo "=== fin ==="
} >> "$LOG" 2>&1

Puis chmod +x wp-weekly.sh et un cron hebdomadaire :

0 4 * * 1 /home/monuser/bin/wp-weekly.sh

Réinitialiser un site de staging

#!/bin/bash
# Restaure le staging à partir de la prod
cd /var/www/vhosts/staging.mon-domaine.fr/httpdocs

# Clone DB depuis la prod
ssh prod 'wp --path=/var/www/vhosts/mon-domaine.fr/httpdocs db export -' | wp db import -

# Remplace les URLs
wp search-replace 'https://mon-domaine.fr' 'https://staging.mon-domaine.fr' --all-tables --skip-columns=guid

# Désindexation staging
wp option update blog_public 0
⚠️
Piège classique : exécuter WP-CLI en root
WP-CLI refuse par défaut de tourner en root. Si vous voyez Error: YIKES! It looks like you're running this as root, ne mettez pas --allow-root pour passer outre : vous créerez des fichiers appartenant à root que le serveur web ne pourra plus écrire. Utilisez sudo -u monuser wp ..., ou connectez-vous en SSH avec l'utilisateur système du site (visible dans Plesk).

Un module PHP manque

Certaines commandes demandent des extensions PHP spécifiques (zip, imagick, intl). Si vous voyez Missing PHP extension, ouvrez un ticket chez Datacampus, nous l'activons côté serveur — ce n'est pas une opération que vous pouvez faire depuis Plesk.

Pour aller plus loin

Besoin d'aide ?

Cette documentation ne couvre pas votre cas ? Notre support humain est là.