Pendant la majeure partie de sa vie, WordPress a été construit à l’aide d’une simple base de code avec une pointe de PHP orienté objet, le système le plus abstrait. Au cours des dernières années, cependant, la situation s’est améliorée. Des tests unitaires aux outils de preprocessing CSS et de ligne de commande, de plus en plus de ressources adaptées aux développeurs font leur apparition. Dans cet article, nous allons regarder un de mes favoris : WP-CLI.

WP-CLI est un projet open source depuis plus d’une décennie, maintenu principalement par Daniel Bachhuber depuis 2003. L’objectif principal de WP-CLI est d’aider et augmenter le flux de travail des développeurs WordPress.

Au fil des ans, le projet s’est beaucoup transformé ! C’est même devenu une exigence pour d’autres projets open source tels que Trellis et Bedrock. Depuis janvier 2017, WP-CLI a officiellement déménagé sur WordPress.org et est maintenant co-maintenu par Alain Schlesser.

WP-CLI v2 est sorti le 8 août 2018, nous allons donc également explorer certains des changements et des nouvelles fonctionnalités. Si vous êtes un client Kinsta, WP-CLI v2.0.1 est installé par défaut sur tous nos serveurs, connectez-vous simplement en SSH sur votre serveur pour commencer. L’accès SSH est inclus dans tous nos plans d’hébergement. (Impossible de se connecter via SSH ? Corrigez l’erreur SSH “Connexion refusée” de SSH).

Obtenir WP-CLI

La version PHP minimale pour WP-CLI v2.0.0 est passée à supérieur à PHP 5.4. Bien qu’il s’agisse d’un bon pas en avant, nous vous recommandons d’exécuter au moins une version supportée de PHP, c’est-à-dire 5.6 ou supérieure. PHP 7.2 est par défaut sur toutes les installations de Kinsta, à la fois pour des raisons de sécurité et de performances. Nous avons aussi PHP 7.3 et 7.4 de disponible.

Pour commencer, vous devrez installer WP-CLI – un processus très simple. Les étapes pour Linux et OSX sont les suivantes, lancez ces trois commandes l’une après l’autre :

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

Si quelque chose ne va pas ou si vous êtes sous Windows, reportez-vous aux instructions de base ou aux méthodes d’installation alternatives.

Une fois terminé, vous devriez être en mesure de lancer la commande wp --info et obtenir une réponse significative.

Le processus est le même si vous voulez installer WP-CLI sur votre serveur. Rappelez-vous, pour les clients Kinsta, WP-CLI est déjà installé. Vous n’êtes pas sûr de la version que vous utilisez actuellement ? Vous pouvez toujours utiliser la commande wp cli version pour le savoir.

Les bases de WP-CLI

Avoir accès à WordPress à partir de la ligne de commande est puissant en soi, mais peut vous donner encore plus de contrôle et de gains de vitesse lorsque vous utilisez des scripts bash.

Les scripts Bash vous permettent d’exécuter une séquence de commandes avec une seule commande. Vous pouvez taper bash install-and-setup.sh et obtenir le résultat suivant :

  • Installer WordPress
  • Créer et remplir le fichier wp-config.php
  • Créer une base de donées
  • Installer WordPress
  • Installer et activer tous les plugins que vous voulez
  • Installer et activer un thème
  • Télécharger et ajouter du contenu de test

Ce sont les mesures que je prendrais pour créer un nouvel environnement de test pour un projet. Normalement, cela me prendrait au moins 5-10 minutes, surtout s’il y a quelques plugins impliqués. Utiliser une seule commande est évidemment beaucoup plus rapide.

Les commandes générales de WP-CLI

Si vous avez l’habitude de travailler dans le terminal, WP-CLI n’a rien de spécial pour vous. Les commandes commencent toujours par wp suivi d’une commande et d’une sous-commande, suivies des paramètres obligatoires et facultatifs, comme ceci :

wp command subcommand requiredparam --optionalparam --optionalparam2=value

Installons un thème pour voir comment cela fonctionne avec une commande réelle :

wp theme install twentyseventeen --activate

Cela installera et activera le Thème Twenty Seventeen sur votre installation WordPress.

Notez que WP-CLI fonctionnera avec l’installation de WordPress que vous gérez actuellement dans le terminal. Si vous changez de répertoire pour aller vers une autre installation WordPress, cela fonctionnera avec celle-ci.

Exemples utiles

Bien qu’il y ait certaines choses avancées que vous pouvez faire, que nous aborderons dans un instant, vous en savez déjà assez pour commencer et faire ce que vous avez à faire. Je recommande de jeter un coup d’oeil à la liste des commandes, essayez-en quelques-unes. Nous allons jeter un coup d’oeil à plusieurs choses utiles ici, puis avancer pour utiliser WP-CLI en SSH et en utiliser des scripts bash.

Installer WordPress

J’utilise beaucoup WP-CLI pour mettre en place des environnements de test, dont la première étape est une installation vanilla. Voici une liste des commandes que j’exécute :

wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

Remarquez comme c’est cool ! La version la plus récente de WordPress est téléchargée à l’aide de la première commande. La seconde commande configure le fichier de configuration avec l’accès à la base de données et quelques codes PHP supplémentaires à la fin. Les constantes supplémentaires nous permettent d’avoir nos options de débogage pour les tests. Nous avons ici un guide détaillé si vous souhaitez en savoir plus sur le débogage de WordPress.

La troisième commande crée la base de données (WP-CLI utilise les informations d’accès à la base de données à partir du fichier de configuration) et finalement, nous installons WordPress en utilisant quelques paramètres.

Réinstaller le coeur de WordPress

Vous pouvez aussi réinstaller le coeur de WordPress en utilisant WP-CLI. La commande suivante devrait télécharger le coeur de WordPress sans les thèmes et plugins par défaut.

wp core download --skip-content --force

Changer l’URL de WordPress

Il y a plusieurs raisons pour lesquelles vous pourriez avoir besoin ou vouloir changer votre URL WordPress. Peut-être que vous changez de domaine, passez à un sous-domaine, mettez à jour de www à non-www, déplacez des fichiers, ou même migrez de HTTP à HTTPS. Quoi qu’il en soit, vous pouvez utiliser facilement la commande wp option update pour cela, voici un exemple ci-dessous :

wp option update home 'http://exemple.com'
wp option update siteurl 'http://exemple.com'

Liste des plugins actuels avec des détails

Pour obtenir une liste des plugins actuels installés sur un site, utilisez simplement la commande suivante. Dans cet exemple, vous pouvez voir que nous avons installé le plugin SEO Schema and Yoast. Il retournera également le statut (actif/inactif), s’il y a une mise à jour disponible, et la version actuelle.

wp plugin list
Lister les plugins avec WP-CLI
Lister les plugins avec WP-CLI

Installer plusieurs plugins

Pour installer plusieurs plugins, vous pouvez simplement empiler les paramètres. Voici un exemple qui télécharge et active 3 plugins :

wp plugin install advanced-custom-fields jetpack ninja-forms --activate

Notez que le nom des plugin vient de leur nom dans le répertoire WordPress. La façon la plus simple de s’en rendre compte est de visiter leur page et de regarder l’URL ou d’utiliser wp plugin search searchterm qui vous donnera une liste dans le terminal.

URL du référentiel de plugins WordPress
URL du référentiel de plugins WordPress

Vous pouvez aussi installer une version ancienne des plugins WordPress si besoin avec l’attribut --version.

wp plugin install wordpress-seo --version=4.8 --activate

Encore plus cool, vous pouvez installer des plugins à partir de fichiers distants, pas seulement le référentiel, ce qui est pratique si vous développez un plugin, ou utilisez un plugin premium. La commande suivante installe deux plugins à partir du référentiel et un à partir d’un serveur Amazon S3.

wp plugin install advanced-custom-fields jetpack https://d1qas1txbec8n.cloudfront.net/wp-content/uploads/2015/06/23073607/myplugin.zip --activate

Désactiver plusieurs plugins

Pour désactiver un seul plugin, vous pouvez exécuter la commande suivante.

wp plugin deactivate wordpress-seo

Pour désactiver tous vos plugins en même temps, exécutez la commande suivante.

wp plugin deactivate --all
Désactiver tous les plugins avec WP-CLI
Désactiver tous les plugins avec WP-CLI

Cette commande ci-dessus peut être utile si vous rencontrez des problèmes de compatibilité et que vous avez simplement besoin de désactiver tous les plugins d’un seul coup d’œil. Vous pouvez ensuite revenir en arrière et les activer un par un, en les testant au fur et à mesure.

Mettre à jour les plugins

Vous pouvez également mettre à jour manuellement les plugins WordPress. Exemple ci-dessous :

wp plugin update wordpress-seo
Mise à jour manuelle de plugin avec WP-CLI
Mise à jour manuelle de plugin avec WP-CLI

Chercher et Remplacer dans la base de données

Une des principales raisons pour lesquelles il est difficile de migrer un site par simple copier-coller d’une base de données est que celle-ci contient des tableaux sérialisés. Si vous devez remplacer toutes les instances de http://testsite.com par http://livewebsite.com vos tables sérialisées n’auront aucun sens car le nombre de chaînes ne correspondra pas.

La commande search-replace désérialise d’abord les tables, puis effectue la recherche et le remplacement, puis resérialise les tables. Vous pouvez le faire avec une simple commande :

wp search-replace oldstring newstring

Des paramètres supplémentaires vous permettent d’en faire beaucoup plus, y compris la prévisualisation de ce qui sera remplacé en utilisant --dry-run.

Importer et Exporter

Il y a deux façons d’exporter du contenu avec WP-CLI. Vous pouvez créer un fichier XML, comme le fait l’outil d’exportation WordPress, ou vous pouvez exporter/importer la base de données brute. Je trouve ce dernier beaucoup plus utile dans ma routine quotidienne, c’est très pratique pour synchroniser des sites.

wp db export est tout ce dont vous avez besoin pour créer un fichier SQL et wp db import file.sql est tout ce dont vous avez besoin pour l’importer. Fonctionne parfaitement, il suffit de faire attention à ne pas écraser tout ce dont vous avez besoin, l’importation va essentiellement vider la base de données existante et utiliser le fichier SQL fourni à la place.

Ajouter, mettre à jour, supprimer des utilisateurs

Vous pouvez ajouter, mettre à jour et supprimer des utilisateurs avec WP-CLI.

# List user IDs
$ wp user list --field=ID
1

# Create a new user.
$ wp user create john [email protected] --role=author
Success: Created user 3.
Password: HOh897%*(&^R8

# Update an existing user.
$ wp user update 123 --display_name=Beth --user_pass=bethpass
Success: Updated user 123.

# Delete user 123 and reassign posts to user 443
$ wp user delete 123 --reassign=443
Success: Removed user 123 from http://example.com

Gérer les rôles et les permissions

WP-CLI peut gérer les rôles pour vous assez facilement en utilisant la commande wp role. C’est plutôt cool si vous voulez tester le fonctionnement de votre plugin avec des rôles personnalisés mais que vous ne créez pas réellement les rôles dans votre plugin.

wp role create organizer Organizer
wp cap list 'editor' | xargs wp cap add 'organizer'
wp cap add 'organizer' 'manage-events'

Les commandes ci-dessus créeront un nouveau rôle (Organizer), y ajouteront toutes les permissions du rôle éditeur, puis ajouteront une nouvelle capacité : manage-events. Avec les bonnes commandes, vous pouvez utiliser WP-CLI pour changer votre mot de passe WordPress.

Générer des données de test

J’adore toutes sortes de fonctions qui ressemblent à des fausses fonctions – celles qui ajoutent un contenu factice à votre site que vous pouvez utiliser pour les tests. WP-CLI a quelques unes de ces fonctions intégrées, voici quelques unes d’entre elles qui vont générer des utilisateurs, des termes et des articles.

wp user generate --count=5 --role=editor
wp user generate --count=10 --role=author
wp term generate --count=12
wp post generate --count=50

Gérer les événements WP-Cron

Vous pouvez gérer des événements WP-Cron et/ou une tâche Cron WordPress dans WP-CLI. Par exemple, la commande suivante vous donnera votre liste d’événements cron actuelle.

wp cron event list
Lister les événements wp-cron
Lister les événements wp-cron

Supprimer les Transients

Vous pouvez même supprimer et effacer un ou tous les transients à l’aide de la commande suivante.

wp transient delete --all

Si vous utilisez plusieurs sites, vous aurez besoin d’une commande un peu plus compliquée. Par défaut, la commande ne vérifie que la table wp_options. Elle ne vérifie pas wp_1_options, wp_2_options, etc.

wp transient delete --all --network && wp site list --field=url | xargs -n1 -I % wp --url=% transient delete --all

Nettoyer la table wp_options

La table wp_options peut être un coupable commun pour les temps de requêtes lents sur votre site en raison de données chargées automatiquement qui sont laissées derrière par des plugins et des thèmes tiers. Lisez cet excellent article de WP Bullet sur comment utiliser WP-CLI pour nettoyer votre table wp_options.

Supprimer les révisions WordPress

Sur les sites plus grands, les révisions WordPress peuvent ajouter très rapidement des milliers de lignes qui ne sont pas nécessaires dans votre base de données. Vous pouvez supprimer les révisions avec WP-CLI. Voici un exemple de commande :

$ wp post delete $(wp post list --post_type='revision' --format=ids)
Supprimer les révisions WordPress avec WP-CLI
Supprimer les révisions WordPress avec WP-CLI

Contrôle du Mode Maintenance

Depuis WP-CLI v2.2.0, vous pouvez maintenant contrôler le mode maintenance sur votre site WordPress. Exemple:

wp maintenance-mode activate
wp maintenance-mode deactivate
wp maintenance-mode status

Indéxer les données avec Elasticsearch

Elasticsearch est un moteur de recherche full-text open source. Il est utilisé pour indexer les données et les rechercher incroyablement rapidement. Nous l’offrons en tant qu’option additionnelle pour les clients Kinsta. Vous pouvez utiliser les commandes WP-CLI ElasticPress pour effectuer une indexation via SSH. Exemple :

wp elasticpress index [--setup] [--network-wide] [--posts-per-page] [--nobulk] [--offset] [--show-bulk-errors] [--post-type]

Working with Multilingual Sites

WP-CLI v2.0.0 inclut une nouvelle famille de commandes wp i18n pour ceux qui travaillent avec des sites multilingues. Par exemple, vous pouvez créer un fichier POT pour un plugin ou un thème WordPress.

wp i18n make-pot  [] [--slug=] [--domain=] [--ignore-domain] [--merge[=]] [--exclude=] [--skip-js]

Voir la documentation sur les commandes i18n.

Utiliser WP-CLI avec WooCommerce

Vous travaillez avec des sites de eCommerce ? 🛒 Nous vous recommandons de lire l’incroyable guide de développement WooCommerce avec WP-CLI de Robot Ninja pour des commandes simples et rapides que vous pouvez utiliser. La génération d’une liste de clients, les commandes et même la création de produits en vrac sont tous possibles avec WP-CLI.

Utiliser WP-CLI à distance

Une des meilleures choses que vous pouvez faire avec WP-CLI est de gérer vos installations WordPress à distance. C’est vraiment le rêve d’un gestionnaire de site web qui se réalise.

Pour exécuter de façon transparente les commandes WP-CLI sur un serveur distant via SSH, vous aviez auparavant besoin de la commande wp-cli-ssh addon. Mais depuis la v0.24.0, cela fait maintenant partie du WP-CLI lui-même ! 👏

Important : Vous devez installer WP-CLI à la fois sur l’ordinateur à partir duquel vous exécutez la commande et sur votre serveur.

Configurer les serveurs distants

Vous pouvez configurer vos serveurs globalement ou localement. Pour les configurer globalement, utilisez le fichier config.yml. Vous pouvez également utiliser les fichiers wp-cli.yml ou wp-cli.local.yml dans votre répertoire de travail actuel.

La configuration des serveurs fonctionne de la manière suivante, collez ceci dans l’un des fichiers mentionnés :

ssh:

  staging:
    cmd: ssh %pseudotty% [email protected] %cmd%
    url: http://monsite.com
    path: /www/path/to/site/root

Une fois tout cela fait, vous pouvez taper la commande suivante pour mettre à jour WordPress sur votre site distant :

wp ssh core update --host=staging

Si vous possédez ou gérez beaucoup de sites, je pense que vous pouvez voir que c’est incroyable ! Le script vous demandera un mot de passe, mais si vous utilisez les clés RSA pour vous connecter, vous pouvez également y renoncer. Jetez un coup d’oeil à cet article pour configurer cela.

Utiliser des Scripts Bash

Les scripts Bash vous font gagner encore plus de temps en automatisant les tâches. Vous vous souvenez qu’il fallait taper beaucoup de commandes pour installer WordPress ? Vous pouvez le faire avec un seul script bash. Dans un répertoire, créez un fichier install.sh. Collez le même code que celui que nous avions à l’intérieur et sauvegardez-le.

wp core download
wp core config --dbname=mydbname --dbuser=mydbuser --dbpass=mydbpass --dbhost=localhost --dbprefix=whebfubwef_ --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
PHP
wp db create
wp core install --url=http://siteurl.com --title=SiteTitle --admin_user=username --admin_password=mypassword [email protected]

Tous ce dont vous avez besoin est d’entrer bash install.sh et tout sera fait pour vous, sans intervention de l’utilisateur. Si vous gérez beaucoup de sites, vous pouvez configurer tous vos environnements et créer un script bash comme ceci :

wp ssh core update --host=clientA
wp ssh core update --host=clientB
wp ssh core update --host=clientC
wp ssh core update --host=clientD

Quand une nouvelle version de WordPress sort, cela peut vous faire gagner un temps précieux ! Comme vous pouvez faire tout ce que vous voulez avec WP-CLI, vous pouvez même mettre à jour les thèmes et plugins régulièrement sur un certain nombre de sites clients à la fois.

Résumé

WP-CLI est vraiment le rêve du développeur et du gestionnaire de sites Web qui devient réalité. En tant que développeurs, nous pouvons créer des sites de test en un tournemain, ajouter du contenu de test et faire toutes sortes d’import/export magiques. Les gestionnaires de sites peuvent gérer les mises à jour des sites et d’autres tâches pour plusieurs sites avec des commandes uniques. Assurez-vous de vérifier les notes de publication de WP-CLI v2!

Si vous n’avez pas encore essayé WP-CLI, je vous invite à le faire. Il y a aussi un tas d’autres commandes, comme WP-CLI-SSH qui ajoute encore plus de fonctionnalités ! Si vous rencontrez des problèmes, assurez-vous de regarder la documentation WP-CLI pour les problèmes communs.

N’oubliez pas que l’architecture Google Cloud de Kinsta prend en charge WP-CLI. Si vous souhaitez essayer l’architecture de l’hébergement WordPress Kinsta et avoir accès à de grands outils comme WP-CLI, essayez notre hébergement WordPress infogéré.

Daniel Pataki

Hi, my name is Daniel, I'm the CTO here at Kinsta. You may know me from Smashing Magazine, WPMU Dev, Tuts+ and other WordPress/Development magazines. Aside from WordPress and PHP I spend most of my time around Node, React, GraphQL and other technologies in the Javascript space.

When not working on making the best hosting solution in the Universe I collect board games, play table football in the office, travel or play guitar and sing in a pretty bad band.