Des requêtes SQL pour les administrateurs WordPress volume 3

(1198 mots)

Volume 3 donc de la série, aujourd’hui nous évoquerons des requêtes SQL mais à travers un outil un chouïa plus simple.

Pour lire les autres articles ça se passe ici : mysql

Quel outil ?

Il s’agit bien sûr de WP CLI ! Trop souvent oublié par les développeurs WordPress, l’outil, depuis qu’il a été repris et enrichi de tout un tas de packages ultra-cool et performants, s’avère très pratique pour faire des requêtes en base de données avec WordPress et nous évite même d’avoir à en faire quelque fois en fournissant des commandes prêtes à l’emploi.

La classique désactivation des plugins depuis la base de données

Prenons une requête comme :

UPDATE wp_options SET option_value = 'a:0:{}'WHERE option_name = 'active_plugins';

Alors y a ceux qui seront tentés de faire :

wp db cli
UPDATE wp_options SET option_value = 'a:0:{}'WHERE option_name = 'active_plugins';

en effet la commande wp db cli permet d’accéder à la base de données et donc après il suffit de lancer la requête mais maintenant plus aucun intérêt puisque l’on peut lancer directement :

wp option update active_plugins "a:0:{}"

hey psssst ! Tu crois que t’es arrivé avec la commande ? et bah non ! Y a mieux :

wp plugin deactivate --all

Lire une option

Y a l’update, bah y a le GET aussi :

wp option get active_plugins --format=json

ce qui sur mon installation locale donne :

["gutenberg\/gutenberg.php"]

C’est tellement moins chiant que de devoir faire un SELECT à la main et on a même des options de formatage ! A noter qu’ici on pourrait même utiliser une autre commande qui est :

wp plugin list --status=active --format=json

et qui donnerait toujours sur mon installation locale :

[{"name":"gutenberg","status":"active","update":"available","version":"2.1.0"}]

Obtenir des infos sur la base rapidement

Vas-y vas googler comment obtenir la taille d’une base de données en SQL et have fun. Sinon tu peux faire avec WP-CLI :

wp db size

et c’est tout ! Tu peux évidemment rajouter plein d’argument comme –tables qui te permet de voir le détail par tables :

wp db size --tables

tout est dans la doc de la commande wp db size !

Tabula rasa

Une de mes préférées car j’aime les nouveaux départs :

wp db reset

La commande efface la base. Avant elle demande confirmation, car c’est pas anodin comme opération on en conviendra tous, mais tu peux quand même lui dire de la boucler (zapper le message de confirmation) avec une option –yes

wp db reset --yes

voir la doc de la commande db reset

Rechercher / replacer

Rechercher / remplacer dans les posts

J’avoue avant je faisais ça :

UPDATE wp_posts SET POST_CONTENT = replace(POST_CONTENT, 'trucmuche', 'bidule');

Source

mais ça c’était avant, maintenant je fais :

wp search-replace 'trucmuche' 'bidule'  table=wp_posts --dry-run

dans un premier temps vous noterez que je fais un « –dry-run » car je veux voir ce que ça va faire avant de lancer l’opératiob notamment le nombre de résultats potentiels et après j’enlève le –dry-run :

wp search-replace 'trucmuche' 'bidule'  table=wp_posts

car là je suis sûr de ce que je vais lancer, vous noterez aussi l’utilisation de table=wp_posts, oui parce que je suis pas obligé de lancer un rechercher remplacer sur absolument toutes les tables de ma base mais plutôt sur celle qui m’intéresse.

Rechercher / remplacer pour un export

Une qui me plaît plutôt très beaucoup bien :

 wp search-replace 'local.wordpress.test' 'mon-site.com' --export=dump.sql

donc en fait ici tu fais un rechercher / remplacer mais au lieu de balancer la commande en base et donc te retrouver avec les chaînes remplacées dans ta base locale, il te pond un fichier dump.sql (parce que c’est le nom que t’as donné) avec les urls remplacées à l’intérieur.

Franchement qui trouvera à redire là ? balade-toi dans la doc de wp search-replace, tu peux même lui dire de ne travailler que sur quelques tables précises, ou exclure certaines,

Export / import

Alors d’abord l’export

On vient de le voir, on peut faire des exports assez fins avec la commande wp search-replace mais il existe aussi une commande wp db export. Ainsi :

wp db export dump.sql

me fait un export basique des familles de la base.

wp db export dump.sql --tables=wp_users,wp_usermeta

est déjà plus sélectif et ne m’exportera que les tables dont j’ai besoin ici.

Ensuite l’import

Et ouais on est dans l’import-export ici, alors là même qu’avec la commande d’en haut mais cette fois-ci à l’inverse, on vient importer un dump :

wp db import dump.sql

que ce soit pour l’export ou l’import, je n’ai plus à rentrer ces putains d’identifiants de user, db name, etc… la commande d’import va directement chercher les constantes utilisées par WordPress dans le wp-config.php

T’es gentil moi ça plante !

alors as-tu tenté ça ?

vraiment ne pas hésiter ça peut sauver quelques cheveux arrachés violemment ^^, ça marche avec les thèmes aussi –skip-themes. Il y a aussi ce blog post de K.Lampert qu’on a m’a recommandé et que je te recommande à mon tour. Donc si jamais tu n’as besoin de ne garder qu’un seul plugin actif dans ton exécution de WP-CLI tu n’as peut-être pas envie de rédiger 10 lignes avec –skip-plugins.

Conclusion

WP-CLI est tout puissant. Évidemment ici on a focalisé sur les opérations en base et j’espère vous avoir démontré l’intérêt et la puissance de l’outil, donc si vous avez le choix autant passer par lui que vous hasarder à du SQL bien pénible à taper. Plus j’explore l’outil plus je suis tenté de dire « c’est des génies ces gens ». Lisez la doc, on peut faire tellement avec, même générer des blocks Gutenberg, des squelettes de thèmes, de plugins prêts à l’emploi, avec tous les outils du dév WP pour travailler.

WP-CLI peut être étendu, comme WP avec les plugins, c’est le même principe, sauf qu’ici ils appellent ça packages et y a déjà une communauté active, n’hésitez pas y prendre part. Voici une sélection perso très courte de liens utiles

Je vous laisse avec ça :

wp post edit 73

cela lance un écran d’édition du post dont l’ID est 73 depuis le terminal donc tu peux rédiger/éditer tes articles en VIM ! Là j’ai dit « non, ça va trop loin » haha mais comme on l’a vu y a beaucoup plus concret.

Dans la même veine, tu peux aussi lire :

Les commentaires sont fermés.