Cet outil permet d’automatiser des tâches WordPress en ligne de commande et du coup gagner énormément de temps.
Installation
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
Ici on va récupérer le .phar dans notre projet et du coup l’outil est directement utilisable. La documentation est très utile et vous permet par exemple d’ajouter l’auto-complétion 🙂
Maintenant il ne reste plus qu’à vérifier si tout fonctionne.
php wp-cli.phar --info // affichera dans mon cas // PHP binary: /usr/local/Cellar/php70/7.0.15_8/bin/php // PHP version: 7.0.15 // php.ini used: /usr/local/etc/php/7.0/php.ini // WP-CLI root dir: phar://wp-cli.phar // WP-CLI packages dir: // WP-CLI global config: // WP-CLI project config: // WP-CLI version: 1.1.0 chmod +x wp-cli.phar sudo mv wp-cli.phar /usr/local/bin/wp
Les lignes 13 et 14 permettent de rendre exécutable le fichier et de le placer dans le dossier des commandes globales (bin). Ainsi vous allez pouvoir taper wp au lieu de php wp-cli.phar pour utiliser WP-CLI et de n’importe où
À partir de maintenant, vous allez pouvoir par exemple :
// Afficher la version de WordPress wp core version // Mettre à jour WordPress wp core update // Afficher des informations sur les plugins wp plugin status // Mettre à jour un plugin wp plugin update akismet // Afficher des informations sur les thèmes wp theme status // Exporter ou importer une base de données wp db export --add-drop-table export.sql wp db import export.sql // Remplacer les urls de la base de données wp search-replace 'http://old-url.dev' 'http://new-url.fr' // Supprimer les transients de la base de données wp transient delete --all // Lister les crons wp cron event list // Créer un nouveau cron wp cron event schedule cron_test now hourly // Supprimer un cron wp cron event delete cron_test
Évidemment, il y a encore beaucoup de possibilités et de paramètres pour chaque action. Ce n’est qu’un petit aperçu de plusieurs commandes utiles.
On va s’attarder sur le cron qui me semble un point important.
Mise en place d’un cron
La première étape est de le créer la fonction que l’on va appeler avec notre cron :
add_filter( 'nakama_cron_power', 'nakama_cron_hello' ); function nakama_cron_hello() { error_log('cron Nakama Hello :D'); }
Notre cron va s’appeler : nakama_cron_power et utilisera la fonction en paramètre afin d’afficher dans le fichier de log un simple message.
Il ne reste plus qu’à mettre en place le cron via WP-CLI.
// nakama_cron_power > le nom // now > exécutera le cron dès la création // hourly > exécutera le cron chaque heure wp cron event schedule nakama_cron_power now hourly // le message de confirmation :) // Success: Scheduled event with hook 'nakama_cron_power' for 2017-02-11 13:46:57 GMT.
Le texte se trouve dans les logs et on peut voir que le cron est en place et qu’il fonctionnera toutes les heures grâce à la commande.
wp cron event list
Par défaut, il y a 3 intervalles possibles :
- hourly
- twicedaily
- daily
Mais ce serait pas mal de pouvoir en ajouter non ? 🙂
add_filter( 'cron_schedules', 'one_minute' ); function one_minute( $schedules ) { $schedules['every_one_minute'] = array( 'interval' => 60, 'display' => __( 'Toutes les minutes', 'nakama' ) ); return $schedules; }
Ici, je décide de créer un nouvel intervalle qui correspond à chaque minute. Attention tout de même, le nom que l’on va devoir utiliser est celui passé en paramètre du tableau : every_one_minute (modifiable évidemment).
Il ne reste plus qu’à mettre en place le cron !
Attention : un cron ne peut pas être édité ! Il faut le supprimer et ensuite le recréer, donc dans notre exemple :
wp cron event delete nakama_cron_power wp cron event schedule nakama_cron_power now every_one_minute
On confirme toujours que tout est en place et fonctionnel 🙂
Et voilà c’est fini, on a fait le tour de plusieurs éléments intéressants et utiles avec WP-CLI. Il en existe encore beaucoup d’autres, c’est pour cela que la documentation existe 🙂
Le conseil que je donnerai lorsqu’on utilise un cron, c’est de mettre des logs au début et à la fin du script (à minima) afin de s’assurer que le cron fonctionne bien et surtout pour traquer les bugs 😀