Ce guide a été rédigé pour Linux et nécessite d’être (un peu) à l’aise avec le Terminal

L’installation de Wordpress nécessite normalement tout un tas d’étapes: extraire l’archive, éditer le fichier de conf, poursuivre l’installation dans le navigateur pour enfin cliquer un peu partout pour retrouver les plugins, thèmes et réglages que l’on souhaite. Pfiou !

C’est laborieux, et peut mener à des erreurs.

C’est ici que la ligne de commande s’avère utile : la création d’un petit script permet d’automatiser toutes ces étapes, et d’installer en quelques secondes un Wordpress tout frais avec les plugins, thèmes et paramètres désirés.

Sans plus attendre, une démonstration en image :

Une fois le script exécuté, un serveur est lancé et donne accès à un Wordpress avec:

  • le thème souhaité, il est même possible de créer un thème enfant à la volée.
  • les plugins sélectionnés, qu’il est possible d’activer automatiquement ou non.
  • création automatique d’auteur·es et de contenu.
  • certains réglages peuvent également être préconfigurés, comme la structure des URLs, la taxonomie, l’affichage d’une page à la Une, le contenu des menus, et j’en passe

Super, comment on fait?

Première étape, l’installation de Wp-cli.
Ensuite, personnalisation et mise en place du script.
Enfin, petite visite guidée des fonctionnalités et de la documentation.

Installer wp-cli

Pour commencer, on télécharge la dernière version :

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

On rends ensuite le script exécutable :

chmod +x wp-cli.phar

On rend cet exécutable accessible depuis n’importe quel dossier :

sudo mv wp-cli.phar /usr/local/bin/wp

Pour finir, petit test pour s’assurer que tout fonctionne:

wp --info

En cas d’erreur /usr/bin/env: « php »: Aucun fichier ou dossier de ce type, on prend le temps d’installer php:

sudo apt install php7.3 php7.3-mysql  php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip

puis on relance wp --info pour vérifier

On installe aussi MariaDB, qui gère la base de données de la même manière que mysql:

sudo apt install default-mysql-server

sudo mysql_secure_installation

Premiers pas avec Wp-cli

Une fois que vous avez installé Wp-cli, de nombreuses possibilités s’offrent à vous.
Vous pouvez par exemple installer un Wordpress avec cette série de commandes:

Vous avez un doute sur une commande ?

Direction la documentation officielle, en anglais mais très complète et didactique.

wp core download  --locale=fr_FR --skip-content --user=wp --path=wp

cd wp

wp config create --dbname=wp --dbuser=root --prompt=dbpass

En cas de problème de permissions à ce stade, consultez les résolutions de problèmes en bas de page

wp db create

wp core install --url=$1.localhost --title="Wp / $1" --admin_user=dev --admin_password=pass --admin_email=dev@example.net --skip-email

wp theme install --activate https://github.com/RoneoOrg/wp-bootstrap-starter/archive/refs/heads/master.zip

wp server

Automatisation à tous les étages

Dans ma situation, seul le nom du projet et de la base données changent d’un site à l’autre. Même thème de base, même plugins, même réglages.

Le script que j’utilise demande donc seulement de fournir le nom du projet, et se lance avec la commande wpinstall nom-du-projet. Ce nom est utilisé pour créer le dossier et nommer le site.

Le nom de la base de données est ensuite demandé. Et c’est tout, tout le reste est automatisé

Voici le script en question ( je l’explique en détails un peu plus bas):

wpinstall () 
    { 
      wp core download --path="$1" --locale=fr_FR --skip-content ;
      cd "$1" || exit;
      read -rp 'Veuillez entrer le nom de la base de données:' dbname;
      wp config create --dbname="$dbname" --dbuser=root --dbpass=pass --dbhost=localhost --extra-php <<PHP
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
PHP
     wp db create;
     wp core install --url="$1".localhost --title="Wp / $1" --admin_user=dev --admin_password=pass --admin_email=dev@example.net --skip-email
    wp theme install --activate https://github.com/RoneoOrg/wp-bootstrap-starter/archive/refs/heads/master.zip
    wp plugin install wordpress-seo contact-form-7 
    wp option update blog_public 0
    wp language core update
echo -e "\e[1m\e[33mWarning:\e[0m Debug mode is ON";
echo -e "\e[1m\e[33mWarning:\e[0m Plugins was installed but require your manual activation";
wp server
    }

Explication de texte

Les commandes relatives à wp-cli sont bien documentées, je vous laisse consulter la doc, et j’explique ici la partie Bash:

  • wp core download --path="$1": On télécharge Wordpress dans le dossier dont le nom a été précisé dans la commande, qu’on a donné après wpinstall
  • read -rp: Le script demande de préciser le nom de la base de données
  • --extra-php <<PHP: On ajoute du PHP personnalisé dans le fichier wp-config.php
  • define(: Petite subtilité: ces ligne de PHP ne doivent pas être précédées d’une tabulation ou d’espace vide. Pas d’indentation donc.
  • echo -e "\e[1m: On affiche quelques rappels (en couleur, d’où la syntaxe sibylline)
Besoin d'un coup de main pour personnaliser ce script?

Jetez un œil à ce générateur pour wp-cli, créé par Tim Brugman.

Mise en place du script

Ce script doit être placé dans votre fichier bashrc:

nano ~/.bashrc

Coller le script en prenant soin de modifier

  • --dbuser=root
  • --dbpass=pass
  • les lignes wp theme et wp plugin

Quittez ensuite l’éditeur Nano avec Ctrl + X (validez une première fois avec O, puis une seconde fois pour le nom du fichier).

Rechargez enfin le fichier bashrc:

source ~/.bashrc

C’est parti ! Vous pouvez faire un premier test en tapant la commande wpinstall test

Voilà, vous avez une base fonctionnelle et vous pouvez maintenant aller plus loin.

Aller plus loin

Vous trouverez de nombreux usages dans la doc, et de grandes quantités de packages sont disponibles sur Github.

Voici quelques outils qui ont retenu mon attention :

Mettre en place de l’autocompletion

Avant d’aller plus loin, autant se mettre bien avec la completion automatique des commandes

Lister les options modifiables

wp option list

Création d’un thème enfant

wp scaffold child-theme example.org --parent_theme=wp-bootstrap-starter --theme_name=example.org --author=example.org --author_uri=example.org --theme_uri=example.org --activate

Générer des articles de test

wp post create --post_type=page --post_title='Accueil' --post_status=publish

ou plus efficace encore

curl http://loripsum.net/api/5/headers/ul/link/bq | wp post generate --post_type=post --post_content --count=10

Voir également wp-cli-fixtures pour générer des articles contenant des images et des vidéos (de nombreuses dépendances doivent être installées)

Il est également possible de créer un nouvel article et d’importer du contenu directement depuis un fichier .txt :

wp post create ./post.txt --post_title='Exemple d’article' --post_status=publish

Une page statique à la Une

wp option update page_on_front 9
wp option update show_on_front page

Détecter les instances Wordpress présentes sur le disque dur

Affiche le chemin et la version de Wordpress installée, pratique pour savoir si des mises à jour sont nécessaires

wp package install wp-cli/find-command
wp find .

Afficher les mises à jour disponibles

wp core check-update && wp plugin list --update=available && wp theme list --update=available

Tester la sécurité de son installation

Avec wp-cli/doctor

wp package install wp-cli/doctor-command
wp doctor check --all

Afficher les tâches planifiées

wp cron event list

Export / import de la BDD

wp db export
wp db import file.sql

Générer des comptes

wp user generate --count=5 --role=editor

Mettre à jour tous les plugins

wp plugin update --all

Supprimer les révisions

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

Résolution de problème

Problème de permission “Access denied for user ‘root’@’localhost’

wp config create --dbname=wp --dbuser=root --prompt=dbpass
1/11 [--dbpass=<dbpass>]: dbpass
wp config create --dbname='wp' --dbuser='root' --dbpass='dbpass' --dbhost='localhost' --dbprefix='wp_' --dbcharset='utf8' --dbcollate=''
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Solution :

sudo mysql
MariaDB [(none)]> use mysql;
MariaDB [mysql]> update user set plugin='' where user='root';
MariaDB [mysql]> SELECT User, Host, plugin FROM mysql.user;
MariaDB [mysql]> flush privileges;
Ctrl+C pour quitter
sudo service mysql restart

Aller (encore) plus loin

Références