Créer une page regroupant toutes les astuces en vrac ?
Dans le dernier épisode des astuces diverses, on m’a demandé si j’avais une page qui regroupait toutes les astuces sorties depuis le début. Ce n’est pas le cas, ce n’était pas prévu jusqu’à ce que mon esprit décidément mal tourné se dise que c’était peut être possible de manière semi automatisée. J’ai cherché, j’ai trouvé.
La magie de wp cli
Je ne vous ai jamais réellement parlé de cet outil, pourtant pour les utilisateurs avancés de WordPress c’est un outil indispensable à garder dans sa trousse. En l’occurrence, il dispose de beaucoup de fonctions permettant de manipuler ce qui a trait aux posts, qui dans la langue de WordPress couvre à la fois les pages et les articles.
Vous l’aurez compris, l’objectif est de récupérer le contenu des articles et de les concaténer pour les coller dans une page. Et à peu de chose près, wp cli va nous permettre de faire tout ça.
Pas à pas, en douceur
Bon, en cherchant dans la documentation, je ne trouve pas moyen d’afficher les contenus d’une catégorie. Dommage. Cependant wp post list
permet d’afficher tous les articles, et d’appliquer certains filtres. Les articles portent tous le même nom, alors on va bêtement utiliser grep :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
web1@vox:~/web$ wp post list |grep -i "astuces diverses" 4862 Quelques astuces diverses, quatorzième 2018-09-15 11:09:55 draft 4631 Quelques astuces diverses, treizième quelques-astuces-diverses-treizieme 2018-08-12 10:30:09 publish 4481 Quelques astuces diverses, douzième quelques-astuces-diverses-douzieme 2018-05-04 18:30:22 publish 4390 Quelques astuces diverses, onzième quelques-astuces-diverses-onzieme 2018-02-19 18:30:45 publish 4239 Quelques astuces diverses, dixième quelques-astuces-diverses-dixieme 2017-12-22 18:30:38 publish 4088 Quelques astuces diverses, neuvième quelques-astuces-diverses-neuvieme 2017-10-26 18:30:50 publish 3933 Quelques astuces diverses, huitième quelques-astuces-diverses-huitieme 2017-09-12 18:30:55 publish 3723 Quelques astuces diverses, septième quelques-astuces-diverses-septieme 2017-08-11 18:30:30 publish 3538 Quelques astuces diverses, sixième quelques-astuces-diverses-sixieme 2017-06-13 18:30:54 publish 3411 Quelques astuces diverses, cinquième quelques-astuces-diverses-cinquieme 2017-03-31 18:30:14 publish 3224 Quelques astuces diverses, quatrième quelques-astuces-diverses-quatrieme 2017-01-29 10:30:34 publish 3083 Quelques astuces diverses, troisième quelques-astuces-diverses-troisieme 2016-12-12 18:30:20 publish 2961 Quelques astuces diverses, deuxième quelques-astuces-diverses-deuxieme 2016-11-09 18:30:27 publish 2877 Quelques astuces diverses quelques-astuces-diverses 2016-08-31 18:30:54 publish |
Ajoutons quelques options pour ne garder que le titre et l’id, et filtrer sur le statut pour ne garder que les publications et pas le brouillon en cours :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
web1@vox:~/web$ wp post list --post_type=post --fields=ID,post_title,post_status |grep -i "publish" |grep -i "astuces diverses" 4631 Quelques astuces diverses, treizième publish 4481 Quelques astuces diverses, douzième publish 4390 Quelques astuces diverses, onzième publish 4239 Quelques astuces diverses, dixième publish 4088 Quelques astuces diverses, neuvième publish 3933 Quelques astuces diverses, huitième publish 3723 Quelques astuces diverses, septième publish 3538 Quelques astuces diverses, sixième publish 3411 Quelques astuces diverses, cinquième publish 3224 Quelques astuces diverses, quatrième publish 3083 Quelques astuces diverses, troisième publish 2961 Quelques astuces diverses, deuxième publish 2877 Quelques astuces diverses publish |
On approche, on approche. Un des avantages de l’id, c’est que c’est une clé incrémentée en base de données. Donc plus l’article est récent, plus l’id est élevé. Pour s’assurer d’un ordre précis c’est sort qui va faire le taf :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
web1@vox:~/web$ wp post list --post_type=post --fields=ID,post_title,post_status |grep -i "publish" |grep -i "astuces diverses" |sort 2877 Quelques astuces diverses publish 2961 Quelques astuces diverses, deuxième publish 3083 Quelques astuces diverses, troisième publish 3224 Quelques astuces diverses, quatrième publish 3411 Quelques astuces diverses, cinquième publish 3538 Quelques astuces diverses, sixième publish 3723 Quelques astuces diverses, septième publish 3933 Quelques astuces diverses, huitième publish 4088 Quelques astuces diverses, neuvième publish 4239 Quelques astuces diverses, dixième publish 4390 Quelques astuces diverses, onzième publish 4481 Quelques astuces diverses, douzième publish 4631 Quelques astuces diverses, treizième publish |
Pourquoi faire tout ça ? Eh bien, on peut sauvegarder le contenu de chaque article dans un fichier texte. Je teste avec un des articles pour voir si mes espoirs seront comblés :
1 2 3 4 5 6 7 8 9 10 11 |
web1@vox:~/web$ wp post get 2877 --field=content > astuces1.txt web1@vox:~/web$ head astuces1.txt <p style="text-align: justify;">C'est les vacances (du moins pour moi), et même si je me concentre sur ma recherche d'appartement, je n'oublie pas le blog qui me manquait effectivement un peu, et pour lequel j'arrive à trouver de l'inspiration. Enfin presque, aujourd'hui, c'est petit pense-bête pêle-mêle (beaucoup de circonflexes là-dedans) d'astuces diverses dans différents domaines, évidemment presque toujours de la ligne de commande.</p> <p style="text-align: justify;"><!--more--></p> <h3 style="text-align: justify;">Un générateur de mot de passe alphanumérique</h3> <p style="text-align: justify;">Les astuces vont souvent prendre la forme d'un alias, et voici donc le premier, un petit générateur de mot de passe aléatoire, par exemple pour la connexion à une base de données :</p> <pre class="lang:sh decode:true ">alias passgen="strings /dev/urandom | grep -o '[[:alnum:]]' | head -n 12 | tr -d '\n'; echo" </pre> <p style="text-align: justify;">On l'appelle ensuite sans paramètre, et le résultat est immédiat :</p> |
Cool, pas de sérialisation ! Je vais donc pouvoir attaquer la suite, à savoir la récupération de tous les contenus, concaténés dans un seul fichier texte. Pas de mystère, on continue dans le one-liner, et donc passage par une petite boucle (n’en déplaise à Aeris qui n’aime pas for 🙂 ):
1 |
> all_posts.txt; for i in $(wp post list --post_type=post --fields=ID,post_title,post_status |grep -i "publish" |grep -i "astuces diverses" |awk '{print $1}' |sort); do wp post get $i --field=content >> all_posts.txt; echo "<hr />" >> all_posts.txt; done |
On remarquera au passage que j’ajoute une ligne html finale « hr » pour séparer les épisodes, c’est plus pour la forme qu’autre chose, puisque je récupère tout le contenu, avec les introductions donc. Ensuite je crée la page depuis l’admin du site, ce qui me permettra de contrôler le taf. Je cherche via la cli l’id de la page :
1 2 |
web1@vox:~/web$ wp post list --post_type=page --fields=ID,post_title|grep -i "astuces diverses"|awk '{print $1}' 4979 |
Ce qui devrait maintenant me permettre de pouvoir mettre à jour la page :
1 2 |
web1@vox:~/web$ wp post update $(wp post list --post_type=page --fields=ID,post_title|grep -i "astuces diverses"|awk '{print $1}') all_posts.txt Success: Updated post 4979. |
Je vérifie ensuite dans l’éditeur, puis l’aperçu, et ma foi, ça semble bien faire le boulot :
Il ne me reste plus qu’à scripter ça proprement, ne serait-ce que pour accélérer la boucle via une variable. La prochaine fois que j’ai un article de publié je pourrais relancer cette routine et ça fera des Chocapic ! La page est disponible à cette adresse, et elle est accessible via le menu principal dans la section projets.
Est-ce qu’on peut faire mieux ?
J’en sais rien, déjà ça ça fonctionne pas mal donc je suis content, avec les filtres sur les catégories on pourrait regrouper les articles d’autres séries plus simplement que via du grep bien dégueu (et surtout avec des titres différents). Je cherche pas non plus à détecter automatiquement si un nouvel article est publié dans la série, dans une optique d’automatiser complètement la mise à jour de la page à la publication des nouveaux articles.
Mais si vous avez des idées pour tout ça je suis preneur.
Yo,
Euh « La page est disponible à cette adresse », il y a un lien pour voir le rendu ?
Tcho !
Le lien ?
https://blog.seboss666.info/astuces-diverses-recap/
Merci pour l’article, très interessant.
Juste une petite remarque:
– peut être prévoir 1 nombre d’astuces limité par page car a la longue ça risque de piquer un peu pour la charger avc une connexion un peu faible
Ben pour ça y’a les billets originaux. La demande qui avait été faite était de regrouper tout sur une même page. Si tu inclues de la pagination, ça perd tout son intérêt.
Yop,
Je te conseille d’ajouter l’option -n à ta commande sort, sinon quand l’ID du post franchira les 10000 ça ne sera plus classé chronologiquement.
A++
Propre!
Merci pour ce partage