22 requêtes MySQL indispensables pour WordPress

WordPress stocke les données (articles, pages, catégories, etc.) dans une base de données MySQL. Il est donc utile de connaître certaines requêtes pour intervenir rapidement et de façon massive. A ne pas mettre entre toutes les mains toutefois !

N.B : cet article regroupe 22 23 requêtes MySQL pour le CMS WordPress. Avant toute intervention dans votre base de données, faites une sauvegarde préalable. Vous êtes responsable de vos actions !

Mise à jour du 24/05/2014 : les requêtes 5 et 6 ont été corrigées grâce à Julien Maury et son insistance sur presque un an pour me bouger à prendre le temps de vérifier. Merci à lui !

Avertissements

Utilisation de phpMyAdmin

Pour exécuter les requêtes listées ici vous devez être capable de vous connecter à phpMyAdmin, un outil généralement accessible depuis l’administration de votre hébergeur (via cPanel ou Plesk par exemple).

Rendez-vous ensuite dans l’onglet SQL correspondant à la base de données préalablement sélectionnée dans la partie gauche de l’interface.

Si vous n’avez jamais utilisé phpMyAdmin, faites très attention ! Vous pourriez tout supprimer en 1 clic de souris, je dis bien un !

Préfixe de la base wp_

Pour chacune des requêtes ci-dessous, n’oubliez pas de remplacer le préfixe wp_ par celui correspondant à votre base de données MySQL.

Il est fort probable que vous n’ayez pas gardé le préfixe par défaut comme il est recommandé par souci de sécurité.

Sauvegarde de votre base

Avant toute intervention dans phpMyAdmin, faites une sauvegarde de votre base MySQL en suivant le tutoriel pour savoir comment sauvegarder automatiquement la base de données MySQL.

Requêtes sur les custom fields

#1 – Ajouter un custom field à tous les articles et pages

INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT ID AS post_id, 'MonCustomField'
AS meta_key, 'MaValeur' AS meta_value FROM wp_posts
WHERE ID NOT IN (SELECT post_id FROM wp_postmeta WHERE meta_key = 'MonCustomField');

Cette requête ajoute un champ personnalisé (custom field) à tous les articles présents dans la base.

Pensez à remplacer MonCustomField par le nom du champ en question et MaValeur par la valeur de votre choix.

#2 – Ajouter un custom field dans les articles uniquement

INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT ID AS post_id, 'MonCustomField'
AS meta_key, 'MaValeur' AS meta_value
FROM wp_posts WHERE ID NOT IN
(SELECT post_id FROM wp_postmeta WHERE meta_key = 'MonCustomField')
AND `post_type` = 'post';

La même chose que précédemment – avec les mêmes conseils, mais pour les articles seulement.

#3 – Ajouter un custom field dans les pages uniquement

INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
SELECT ID AS post_id, 'MonCustomField'
AS meta_key, 'MaValeur' AS meta_value
FROM wp_posts WHERE ID NOT IN
(SELECT post_id FROM wp_postmeta WHERE meta_key = 'MonCustomField')
AND `post_type` = 'page';

La même chose que précédemment – avec les mêmes conseils, mais pour les pages seulement.

#4 – Supprimer un custom field de tous les articles et pages

DELETE FROM wp_postmeta WHERE meta_key = 'MaValeur';

Cette requête a déjà été expliquée dans le tutoriel Supprimer des champs personnalisés (custom fields) dans WordPress.

#5 – Supprimer un custom field de tous les articles uniquement

DELETE pm
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.post_type =  'post'
AND pm.meta_key =  'MonCustomField'

Idem que précédemment mais pour les articles uniquement.

#6 – Supprimer un custom field de toutes les pages uniquement

DELETE pm
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.post_type =  'page'
AND pm.meta_key =  'MonCustomField'

Idem mais pour les pages seulement.

#7 – Changer la valeur d’un custom field

UPDATE `wp_postmeta`
SET `meta_value` = REPLACE(meta_value, 'AncienneValeur', 'NouvelleValeur')
WHERE `meta_key` LIKE 'MonCustomField';

Remplacez AncienneValeur par la valeur à modifier et NouvelleValeur par la valeur qui doit prendre la place de l’ancienne.

Précisez également le custom field concerné en modifiant MonCustomField.

Requêtes sur les révisions

#8 – Effacer l’historique des révisions d’articles et de pages

DELETE FROM `wp_posts` WHERE `post_type` = 'revision'

Cette requête supprime le versionning de vos articles et de vos pages ; autrement dit, les sauvegardes d’état du contenu.

Pour en savoir plus et aller plus loin en spécifiant une date avant suppression, rendez-vous sur le tutoriel Supprimer les révisions d’articles de WordPress.

#9 – Rechercher les articles d’une catégorie donnée

SELECT post_title FROM wp_posts p
JOIN wp_term_relationships r ON r.object_id = p.ID
JOIN wp_term_taxonomy t ON r.term_taxonomy_id = t.term_taxonomy_id
JOIN wp_terms terms ON terms.term_id = t.term_id
WHERE t.taxonomy ='category'
AND terms.name = 'NomCatégorie'
AND p.post_type = 'post';

Cette requête liste les articles présents dans une catégorie déterminée par NomCatégorie.

#10 – Modifier le statut de publication de vos articles d’une catégorie donnée

UPDATE wp_posts p
JOIN wp_term_relationships r ON r.object_id = p.ID
JOIN wp_term_taxonomy t ON r.term_taxonomy_id = t.term_taxonomy_id
JOIN wp_terms terms ON terms.term_id = t.term_id
SET p.post_status = 'publish'
WHERE t.taxonomy ='category'
AND terms.name = 'NomCatégorie'
AND p.post_type = 'post';

Comme précédemment, remplacez le mot-clé NomCatégorie par la catégorie concernée et indiquez le statut de publication de votre choix dans SET p.post_status = ‘publish’ ; soit publish, pending ou draft.

Requêtes de statistiques

#11 – Nombre d’articles publiés en 2010

SELECT COUNT(*) FROM wp_posts WHERE post_status="publish"
AND post_date BETWEEN '2010-01-01' AND '2010-12-31';

Cette requête vous retournera le nombre d’articles parus au cours de l’intervalle de temps défini. N’oubliez pas de formater vos date à l’anglaise et inversant l’ordre du type année, mois, jour.

#12 – Nombre total de commentaires pour vos articles en 2010

SELECT SUM(comment_count) FROM wp_posts WHERE post_status="publish"
AND post_date BETWEEN '2010-01-01' AND '2010-12-31' GROUP BY post_status;

Cette requête MySQL vous renvoie la somme des commentaires validés au cours de l’année 2010. Là encore, vous pouvez varier l’intervalle de temps ou même supprimer la période pour obtenir le total de commentaires – total qui est affiché dans le Tableau de bord de WordPress.

#13 – Top 10 des articles les plus commentés en 2010

SELECT post_title,comment_count FROM wp_posts WHERE post_status="publish"
AND post_date BETWEEN '2010-01-01' AND '2010-12-31'
ORDER BY comment_count DESC LIMIT 0,10;

Cette commande affiche la liste des 10 articles ayant reçu le plus de commentaires en 2010.

#14 – Top 10 des meilleurs commentateurs sur votre site en 2010

SELECT comment_author,COUNT(comment_count) AS F01
FROM wp_comments,wp_posts WHERE comment_approved=1
AND comment_post_ID=ID AND comment_date BETWEEN '2010-01-01'
AND '2010-12-31' GROUP BY comment_author ORDER BY F01 DESC LIMIT 0,10;

Renvoies la liste des 10 lecteurs ayant le plus commenté sur votre site en 2010.

Une nouvelle fois, vous pouvez faire varier l’intervalle de temps.

De là à créer un widget pour afficher le Top commentateur… il n’y a qu’un pas !

Requêtes sur les URLs de WordPress

#15 – Changer l’URL du site et l’URL d’installation (Siteurl et Homeurl)

UPDATE wp_options
SET option_value =
replace(option_value, 'http://www.vieuxsite.fr', 'http://www.nouveausite.fr')
WHERE option_name = 'home' OR option_name = 'siteurl';

WordPress stocke le chemin absolu de l’URL de votre site et de l’accueil dans la base de données.

Si vous transférez celui-ci d’un serveur local vers un hébergement en ligne, votre site ne fonctionnera car les URLs d’installation pointeront vers les dossiers locaux.

Cette requête est donc là pour résoudre ce problème.

#16 – Changer GUID

UPDATE wp_posts
SET guid = REPLACE (guid, 'http://www.vieuxsite.fr', 'http://www.nouveausite.fr');

Après avoir migré votre blog à partir d’un serveur local sur votre serveur en ligne, ou d’un ancien domaine vers un nouveau domaine, vous aurez besoin de réparer les URLs pour le champ GUID dans la table wp_posts. Un point crucial pour convertir correctement vos permaliens en cas d’erreurs de saisie.

#17 – Changer les URLs de contenu

UPDATE wp_posts
SET post_content =
REPLACE (post_content, 'http://www.vieuxsite.fr', 'http://www.nouveausite.fr');

Pour rappel, les liens présents dans vos articles et pages de WordPress sont inscrites en chemin absolu dans la base de données – et non pas en relatif. Vous devez donc là encore indiquer l’adresse du nouveau site.

#18 – Changer le chemin des images seulement

UPDATE wp_posts
SET post_content =
REPLACE (post_content, 'src="http://www.vieuxsite.fr', 'src="http://amazon.nouveausite.fr');

Si vous avez décidé de basculer vos images dans le cloud computing avec Amazon CloudFront par exemple, il est nécessaire de changer massivement les liens pointant vers chacune de vos images.

Il est également nécessaire de mettre à jour le GUID des fichiers joints :

UPDATE wp_posts
SET  guid = REPLACE (guid, 'http://www.vieuxsite.fr', 'http://amazon.nouveausite.fr')
WHERE post_type = 'attachment';

#19 – Mettre à jour les meta de vos articles

UPDATE wp_postmeta
SET meta_value = REPLACE
(meta_value, 'http://www.vieuxsite.fr','http://www.nouveausite.fr');

De la même façon que les requêtes d’URLs précédentes, celle-ci agira sur les différentes informations insérées dans vos articles comme les custom fields pour mettre à jour les adresses.

Requêtes administratives

#20 – Modifier le compte utilisateur admin

UPDATE wp_users SET user_login = 'Nouveau pseudo' WHERE user_login = 'Admin';

Très utile, cette commande permet de changer le pseudo du compte admin créé par défaut. Cette requête n’est plus utile pour les dernières versions de WordPress qui permette une telle chose dès l’installation.

#21 – Remettre à zéro le mot de passe

UPDATE wp_users SET user_pass = MD5( 'nouveau_mot_de_passe' )
WHERE user_login = 'votre_pseudo';

Utilisez cette requête pour modifier à votre convenance le mot de passe de n’importe quel utilisateur WordPress. Il suffit d’indiquer le nouveau mot de passe et le nom de l’utilisateur concerné.

Pour en savoir plus, rendez-vous sur le tutoriel Modifier le mot de passe d’un utilisateur WordPress via phpMyAdmin.

#22 – Supprimer les commentaires en attente de modération

DELETE from `wp_comments` WHERE `comment_approved` = '0';

Envoyez cette requête pour supprimer la totalité des commentaires qui n’ont pas encore été validés. Utile dans certains cas de spamming importants !

#23 – Supprimer les informations relatives à Akismet (plugin anti-spam de WordPress)

DELETE FROM wp_commentmeta WHERE meta_key LIKE « %akismet% »

Cette requête supprime les informations d’Akismet. Elle a été proposée par Daniel Roch de SEOMIX dans les commentaires de cet article. En voici son explication :

Cela supprime les informations d’Aksimet. A chaque fois qu’une commentaire est contrôlé, Akismet ajoute en base des informations sur la véracité du commentaire : validé ou spam. Il peut aussi rajouter « signalé comme par spam par UTILISATEUR » ou encore « marqué comme légitime par UTILISATEUR ».

Mais une fois validé, inutile de garder ces informations en base de données, surtout avec plusieurs milliers de commentaires.

Merci à lui !

Sources

Cette liste a été constituée à partir de nombreux articles trouvés au fil de mes recherches Google et d’anciens tutoriels sur WordPress Channel.

Tout le mérite revient donc à ses auteurs passionnés de WordPress pour leur travail !

Cette liste de requêtes MySQL pour le CMS WordPress n’est sans doute pas exhaustive ! N’hésitez pas à proposer vos propres requêtes pour qu’elles soient ajoutées dans cet article.