Tout savoir sur WordPress

Tuto WP-CLI : Comment installer et configurer WordPress en moins d’une minute et en seulement un clic

Ce tutoriel fait suite à ma conférence au WP Tech à Nantes, où j’ai présenté notre process d’agence optimisé, et notamment notre script Wippy d’automatisation d’installation et configuration WordPress via l’outil WP-CLI.

Et visiblement beaucoup d’entre vous l’attendent avec impatience !

Ma conférence

J’ai originalement présenté WP-CLI au WP Tech 2014 à Nantes. Voici les slides de ma présentation :

Qu’est-ce que WP-CLI ?

WP-CLI est un outil fonctionnant en ligne de commande (CLI = command line interface) permettant de procéder à des opérations sur un WordPress via un script Bash. Je ne suis pas fan de la ligne de commande à la base, mais j’ai bien vite changé d’avis en voyant toutes les possibilités !

wp-cli-terminal

Toutes les commandes se lancent via wp. Techniquement vous aurez accès à toutes les fonctions de WordPress : télécharger, installer WordPress, les plugins, les thèmes, créer ou modifier des articles, ajouter des utilisateurs, modifier des options…

Imaginez donc toutes les possibilités ! 

Pour vous donner une idée de l’étendue de WP-CLI,  je vous invite à consulter la documentation en ligne :

Documentation WP-CLI

Quelques idées de scripts

Une autre idée, grâce aux fonctions avancées, est de faire un équivalent de Velvet Blues URL, qui permet de remplacer des URLS par des autres, très utile lors de la mise en ligne d’un site WordPress, afin de remplacer en masse les URLs locales vers les URLs finales.La première idée qui nous vient à l’esprit, c’est d’automatiser l’installation de WordPress afin de gagner un temps considérable lors d’un démarrage de projet. On fait donc chuter de 20 minutes à 30 secondes l’installation d’un site.

Il est possible d’accéder à toutes les fonctions de WordPress avec WP-CLI, donc les possibilités sont presques infinies !

En installant WP-CLI sur vos hébergements, et en vous y connectant en SSH, vous pourriez très bien imaginer de gérer à distance la mise à jour de vos sites et vérifier qu’ils sont toujours en ligne. Un peu comme proposerait le service Manage WP, mais sans la nécessité d’installer un plugin.

Lorsque vous poussez un site en ligne via Git, vous pourriez également imaginer un Git hook qui lance le script WP-CLI sur votre hébergement, afin de remplacer les options Home et Site URL pour mettre les bonnes URLs

Et vous ? Quelle est votre idée ?

Installer WP-CLI

Il vous faudra une invite de commande. Sur Mac je vous conseille de télécharger iTerm qui est plutôt bien pensé. Il vous faudra ensuite installer WP-CLI, et éventuellement Git.

Pour lancer l’installation de WP-CLI, tapez ceci dans la console :

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

Vérifiez que c’est bien installé :

php wp-cli.phar --info

Si vous utilisez Mamp, il faudra faire pointer vers le bon PHP et le bon MySQL (ceux de Mamp). Pour cela ouvrez ~/.zshrc à la racine de votre ordinateur.

# FIX PHP MAMP for WP-CLI
export PATH=/Applications/MAMP/bin/php/php5.6.2/bin:$PATH
export PATH=$PATH:/Applications/MAMP/Library/bin/

redémarrez votre console ensuite.

Le Script en détails

protip : ne vous embêtez pas à copier/coller. Je vous file le script à la fin de ce tuto ;).

  • $1 fait référence au premier paramètre : le nom du site,
  • $2 au titre du site, à fournir entre guillemets s’il a des espaces.

1. Les variables à renseigner

Ces quelques variables sont à changer en fonction de vos envies :

# admin email
email="mon @ email.com"

# local url login
url="http://"$1":8888/"

# admin login
admin="admin-$1"

# path to install your WPs
pathtoinstall="~/Desktop"

# path to plugins.txt
pluginfilepath="~/path/to/wippy/plugins.txt"
  • L’email administrateur
  • L’url locale de votre site
  • l’identifiant admin (ici je génère admin-lenomdevotreprojet)
  • Le dossier où installer WordPress
  • Le fichier qui liste les plugins à installer

2. Les petites fonctions d’affichage (Optionnel)

J’ai ajouté quelques fonctions permettant d’afficher la progression : la fonction bot, ainsi que des codes couleurs pour iterm. Ces fonctions ne sont pas nécessaires au bon fonctionnement du script.

3. Télécharger, configurer, créer la base et installer WordPress

wp core download --locale=fr_FR --force
wp core version
wp core config --dbname=$1 --dbuser=root --dbpass=root --skip-check --extra-php <<PHP
define( 'WP_DEBUG', true );
PHP
wp db create
# generate password
passgen=`head -c 10 /dev/random | base64`
password=${passgen:0:10}
# install
wp core install --url=$url --title="$2" --admin_user=$admin --admin_email=$email --admin_password=$password

Ici, on télécharge WordPress via la command core. On indique en paramètre que l’on veut la version Française. On génère un mot de passe aléatoire en 10 caractères (selon les configs cette commande peut peut-être différer).

Dans la configuration de la base de données, j’ai mis root pour identifiant et mot de passe. Si vous êtes sur Windows sur Easyphp, ce sera root comme identifiant, et mot de passe vide «  ».

vous remarquerez quelques lignes bizarres à la fin de la config, elles permettent d’ajouter du PHP dans votre fichier. On en profite pour passer WP-DEBUG à True.

4. Installer les plugins à partir d’un fichier .txt

while read line
do
    wp plugin install $line --activate
done < pluginfilepath

Ces lignes permettent de récupérer la liste des plugins à installer depuis un fichier txt, qui comprend simplement l’identifiant d’un plugin par ligne. L’identifiant est celui dans l’URL quand vous êtes sur le site des extensions WordPress. Par exemple : wordpress-seo pour Yoast

5. Télécharger son thème versionné depuis Git

cd wp-content/themes/
git clone git @ bitbucket.org:maximebj/wordpress-zero-theme.git
wp theme activate $1

On télécharge ici le thème WP0 thème (le thème ultra minimaliste WP-Spread pour démarrer votre développement rapidement) depuis Bitbucket via une commande git, et on active ce thème.

6. Créer les articles et pages

wp post create --post_type=page --post_title='Accueil' --post_status=publish
wp post create --post_type=page --post_title='Blog' --post_status=publish
wp post create --post_type=page --post_title='Contact' --post_status=publish
wp post create --post_type=page --post_title='Mentions Légales' --post_status=publish

curl http://loripsum.net/api/5 | wp post generate --post_content --count=5

On crée les pages habituelles, comme Accueil, Contact, Mentions légales, ainsi qu’une série de 5 articles dont le contenu a été généré aléatoirement via l’api de loripsum.net.

7. Paramètres habituels, Permaliens et nettoyage

# Change Homepage
bot "Je change la page d'accueil et la page des articles"
wp option update show_on_front page
wp option update page_on_front 3
wp option update page_for_posts 4

# Menu stuff
bot "Je crée le menu principal, assigne les pages, et je lie l'emplacement du thème : "
wp menu create "Menu Principal"
wp menu item add-post menu-principal 3
wp menu item add-post menu-principal 4
wp menu item add-post menu-principal 5
wp menu location assign menu-principal main-menu

# Misc cleanup
bot "Je supprime Hello Dolly, les thèmes de base et les articles exemples"
wp post delete 1 --force # Article exemple - no trash. Comment is also deleted
wp post delete 2 --force # page exemple
wp plugin delete hello
wp theme delete twentytwelve
wp theme delete twentythirteen
wp theme delete twentyfourteen
wp option update blogdescription ''

# Permalinks to /%postname%/
bot "J'active la structure des permaliens"
wp rewrite structure "/%postname%/" --hard
wp rewrite flush --hard

# cat and tag base update
wp option update category_base theme
wp option update tag_base sujet

Ici on procède a un gros nettoyage de printemps : on enlève les thèmes de base inclus dans WordPress, les articles exemple, on vire Hello Dolly,  on active la structure des permaliens sur /%postname%/ et on défini Accueil en page d’accueil.

On crée également un menu que l’on assigne à la zone main-menu (définie dans le thème dans functions.php) et on y assigne les pages nouvellement créées.

8. Versionnement du projet

cd ../..
git init    # git project
git add -A  # Add all untracked files
git commit -m "Initial commit"   # Commit changes

Pour les habitués de git, on va simplement lancer le versionnement du projet. Pour ceux pas à l’aise avec Git, je vous conseille de suivre quelques tutos, comme celui d’Openclassrooms, vous comprendrez bien assez vite les bénéfices d’un projet gité, que vous soyez seul ou en équipe.

9. Ouvrir le navigateur, le finder et sublime text

# Open in browser
open $url
open "${url}wp-admin"

# Open in Sublime text
# REQUIRED : activate subl alias at https://www.sublimetext.com/docs/3/osx_command_line.html
cd wp-content/themes
subl $1

# Open in finder
cd $1
open .

Juste pour le fun, on fait ouvrir le dossier dans l’explorateur, un onglet navigateur avec le site, un autre avec l’admin, et on ouvre le dossier du thème dans sublime text. Autant pousser la flemme jusqu’au bout !

10. Affichage du résumé et copie du mot de passe dans le presse papier

# Copy password in clipboard
echo $password | pbcopy

# That's all ! Install summary
bot "${green}L'installation est terminée !${normal}"
line
echo "URL du site:   $url"
echo "Login admin :  admin$1"
echo -e "Password :  ${cyan}${bold} $password ${normal}${normal}"

Et enfin, on fait copier le mot de passe généré dans le presse papier (il restera plus qu’à coller) et on affiche un résumé des infos. Et voilà !

Bonus : Le Lancer avec Alfred

Si vous avez un Mac et Alfred d’installé, on va pouvoir créer en quelques secondes un mot-clé pour lancer le script avec élégance et rapidité, et s’affranchir totalement d’ouvrir le terminal.

Commande Alfred pour lancer WP-CLI

De quoi impressionner vos potes n’est-ce pas ?

Vous allez avoir besoin du Power Pack Alfred (ça vaut le coup) afin de pouvoir créer vos propres actions.  Dans les préférences d’Alfred, rendez-vous dans l’onglet Workflow.

Nous allons créer une action en 3 étapes :

  • Définir un mot-clé
  • Lancer le script
  • Afficher une notification système

Le Workflow

Créer un workflow Alfred

1. Créer le mot clé

Ajoutez une action de type Mot-clé. Donnez le nom qui vous servira à appeler votre script. Dans mon cas c’est Wippy. Vous pouvez également ajouter le logo WordPress. N’oubliez pas de cocher with space et de sélectionner Argument Required.

Définir un mot clé

2. Lancer le script

Ajoutez une action de type terminal. Nous allons ici simplement appeler notre script bash. Ecrivez bash suivi de l’adresse terminal jusqu’à votre script.sh.  N’oubliez pas d’échapper les espaces avec un backslash.

Ajoutez à la fin {query} qui récupérera les paramètres à transmettre au script

 

Lancer une action terminal

 

3. Notification Système

Pas vraiment nécessaire, mais pour le fun, on peut lancer une petite notification système pour avertir l’utilisateur que le script est en cours d’exécution.

notification système

 

Télécharger WIPPY

Comme je suis sympa, je vous passe le fichier que j’ai utilisé lors de la conférence, qui pourra vous servir de base pour installer WordPress chez vous. N’hésitez pas à personnaliser, hacker et améliorer !

Wippy sur Bitbucket

Conclusion

Prenez un moment pour mettre en place WP-CLI chez vous, vous n’allez pas le regretter !

WP-CLI peut nous apporter énormément pour automatiser nos process de tous les jours. Ce tuto est un exemple parmi toutes les possibilités que l’on peut imaginer. Soumettez vos idées et vos projets !

En espérant que ce tuto vous a plu, je vous invite à le partager à vos connaissances, et me dire en commentaires sous quelle mesure WP-CLI vous a fait gagné du temps !

Cet article a été mis à jour il y a 1050 jours - Il n'est peut être plus à jour !

Article écrit par Maxime BJ

Développeur, bloggeur et formateur Web spécialisé WordPress. 31 ans. Grenoblois. Co-fondateur de WPChef, l’organisme de formation WordPress.

Organisateur de WPInAlps, le meetup WordPress Grenoblois. Vous pouvez me rencontrer lors d’événements tels que WordCamp Paris et Europe. Traducteur Français de l’extension Advanced Custom Fields. Également développeur d’applications web avec MeteorJs. Je m’occupe un site pour apprendre l’informatique aux débutants gratuitement.

J’aime les jeux vidéo, la rando, la bouffe bien grasse et les voyages.

22 Commentaires

  1. J’étais présent à la confs, ayant déjà utilisé WP-CLI je connaissais déjà les avantages. Ce qui était sympa c’est que tu as poussé l’exemple jusqu’au bout : ouvrir l’explorateur directement dans le thème, idem pour sublimtext et pour le navigateur.

    Le seul reproche que j’ai à faire : c’est trop rapide pour aller faire un café en attendant.

    Bravo pour ce script, plus qu’à adapté pour du serveur distant.

  2. Merci beaucoup Maxime pour ce précieux partage. :)
    Lorsque j’avais parcouru tes slides du WP-Tech-Nantes il y a quelques jours, j’avais fait une copie d’écran de l’extrait de code pour l’étudier plus en détail, un peu frustré qu’il ne soit que partiel !
    Je suis comblé d’avoir maintenant accès à son intégralité, qui plus est enrichie de commentaires et d’astuces.
    :D

  3. Wow, super article ! Merci de ce partage ! Avec par exemple un hébergement « tout bête » gandi SH qui propose un accès SSH, ça fait gagner pas mal de temps pour installer un WP.

    • Bonjour,
      j’essaye d’utiliser le script de Clem.
      Tout fonctionne à merveille si je veux faire l’installation de wordpress dans mon dossier utilisateur.
      excepté cela 2 Warning et 2 Error :
      Warning: L’archive n’a pas pu être installée. Cette extension ne contient aucun fichier.
      Warning: Can’t delete the currently active theme: twentyfifteen
      J’active le thème test:
      Error: The ‘test’ theme could not be found.
      Je crée la page pattern et l’associe au template adéquat.
      Error: Le modèle de page est invalide.

      En revanche, le script échoue lorsque j’installe wordpress dans le répertoire htdocs de MAMP.
      Je lance la configuration
      Error: –dbprefix can only contain numbers, letters, and underscores.
      Je crée la base de données
      Error: wp-config.php not found.
      Ensuite, c’est un enchaînement d’erreurs.
      Dans ce cas précis, la base de données n’est pas créée.

      Ais-je mal configuré le script ou y a-t-il un bug avec MAMP?

      P.S. je n’ai pas réussi à utiliser le script Wippy. Je n’ai pas compris ce qu’il fallait remplacer pour le configurer pour mon serveur sous MAMP.

      Bravo pour ce site qui est une mine d’informations, claires et détaillées.
      Merci de votre aide.

      Universalix.

  4. Hello !

    Super idée tous ces enchainements. J’avais un petit script qui faisait le minimum pour gagneur de temps, mais là chapeau … et merci !

    J’ai juste une petite question: tu as géré comment pour que Alfred te lance le script en ouvrant iTerm et non pas le Terminal par défaut d’OS X ?
    J’ai déclaré dans le profil iTerm les « Schemes handled » SSH, Telnet et x-man-page … mais il en a rien à cirer semble-t-il :(

    Encore merci !

    • Ravi d’avoir pu aider ! Le script de Clément biron est encore plus abouti du coup aujourd’hui.
      Très bonne question pour le terminal, je pense simplement avoir défini iterm comme application bash par défaut car j’ai fait aucun réglage particulier dans Alfred pour ça.

  5. bonjour,
    merci pour ton tuto; je galère un peu à l’install ( suis pas vraiment à l’aise avec le terminal ).
    peut être que tu peux m’aider : apparement, je n’arrive pas à régler le problème avec MAMP et la bdd.
    J’ai toujours le message d’erreur :
    Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /Applications/MAMP/htdocs/Wp theme dev/wp-includes/wp-db.php on line 1452
    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /Applications/MAMP/htdocs/Wp theme dev/wp-includes/wp-db.php on line 1482
    Warning: mysql_connect(): No such file or directory in /Applications/MAMP/htdocs/Wp theme dev/wp-includes/wp-db.php on line 1482
    Error:
    Error establishing a database connection
    This either means that the username and password information in your wp-config.php file is incorrect or we can’t contact the database server at localhost. This could mean your host’s database server is down.

    Are you sure you have the correct username and password?
    Are you sure that you have typed the correct hostname?
    Are you sure that the database server is running?

    If you’re unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.
    j’ai pourtant mis dans .zshrc les 2 lignes de code pour pointer suer l bon php et nysql mais manifestement ça coince……
    si jamias tu as une idée, je suis preneur.
    Merci

    • généralement c’est parceque le serveur n’a pas mysql à l’ancienne mais juste mysqli.
      Faut voir si le serveur est à jour au niveau PHP/SQL et voir si ton WordPress est bien à jour aussi ?

  6. En complément de la conférence de Kirsten Cassidy cette année au Wordcamp 2016 je viens de regarder ce vieil article de ton blog pour aller plus en avant et gagner du temps… Félicitations, tu fais partie sans aucun doute de mes meilleurs rencontres de cette année ! Bonne chance avec tes 2 autres acolytes pour WP Chef ;-)

  7. Salut,

    déjà merci pour tes explications. Je regarde pour me faire mon propre script basé sur ton tuto.
    J’ai comme certaines personnes un problème de SQL.

    Ma base de données se créé mais ensuite le script s’arrête et bug avec ce message.

    s/Kevin/Noomia/Develop/WPCLI/wp-includes/wp-db.php on line 1488
    Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /Users/Kevin/Noomia/Develop/WPCLI/wp-includes/wp-db.php on line 1518
    Warning: mysql_connect(): No such file or directory in /Users/Kevin/Noomia/Develop/WPCLI/wp-includes/wp-db.php on line 1518
    Error: Erreur lors de la connexion à la base de données

    Aurais-tu une solution ?

    • Salut,

      Vérifie que : PHP est à jour, MYSQL est à jour et que tu as la dernière version de WP CLI est à jour. Mais je pense plus à PHP pour le coup

  8. c’est vraiment chouette comme script, couplé à Alfred c’est démoniaque :D merci !

    Perso, j’y ai ajouté, pour l’installation en local, la creation du vhost et la mise à jour du host, pour gagner encore un peu de temps :)

c106b166902b3f0a004ff36486486ab2YYYYYYYYYY