Requêtes MySQL : les indispensables pour wordpress

0

J’ai eu des millions de choses à faire en ces derniers mois, et donc je n’ai pas posté d’articles depuis un moment. A mon retour surprise : n’ayant pas correctement set-up mon compte Askimet, je me suis retrouvée avec plus de 22000 commentaires à trier. Impossible de supprimer ces commentaires via la plateforme de wordpress. En effet, à raison de traitement de 20 commentaires à la fois, j’en avais pour un moment !

Le truc, c’est que je suis un peu fénéante pour ce genre de chose et dans ce cas précis : Google est mon ami !

En résultante, j’ai trouvé sur les sites TechRevolutions et WPChannel  (entres autres) d’autres requêtes super intéressantes. En voici donc un aperçu.

WordPress : Comment ça marche ?

WordPress stocke les données (articles, pages, catégories, etc.) dans une base de données MySQL. Il est donc indispensable de connaitre quelques requêtes SQL pour pouvoir agir directement sur la base de données et donc sur l’intégralité des données.

Attention toutefois : C’est irréversible !

Donc n’hésitez pas à faire une sauvegarde avant de mettre vos mimines dans la base pour ne pas perdre d’information précieuses. Connectez-vous à votre phpMyAdmin, et c’est parti !

Requêtes sur les « custom fields »

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 et pages présents dans la base.

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

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’;

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

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’;

Cette requête ajoute un champ personnalisé (custom field) à toutes les pages présentes dans la base.

Supprimer un custom field de tous les articles et pages
DELETE FROM wp_postmeta WHERE meta_key = ‘MaValeur’;
Supprimer un custom field de tous les articles uniquement
DELETE FROM wp_postmeta WHERE meta_key = ‘MyField’ AND `post_type` = ‘post’;
Supprimer un custom field de toutes les pages uniquement
DELETE FROM wp_postmeta WHERE meta_key = ‘MyField’ AND `post_type` = ‘page’;
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 le custom field concerné en modifiant MonCustomField

Requêtes sur les Révisions

Effacer l’historique des révisions d’articles et de pages
DELETE FROM `wp_posts` WHERE `post_type` = ‘revision’
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éfinie par NomCatégorie.

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’;

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

Nombre d’articles publiés en 2013
SELECT COUNT(*) FROM wp_posts WHERE post_status= »publish »
AND post_date BETWEEN ‘2013-01-01’ AND ‘2013-12-31’;
Nombre total de commentaires pour vos articles en 2013
SELECT SUM(comment_count) FROM wp_posts WHERE post_status= »publish »
AND post_date BETWEEN ‘2013-01-01’ AND ‘2013-12-31’ GROUP BY post_status;
Top 10 des articles les plus commentés en 2013
SELECT post_title,comment_count FROM wp_posts WHERE post_status= »publish »
AND post_date BETWEEN ‘2013-01-01’ AND ‘2013-12-31’
ORDER BY comment_count DESC LIMIT 0,10;
Top 10 des lecteurs ayant le plus commenté sur votre site en 2013
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 ‘2013-01-01’
AND ‘2013-12-31’ GROUP BY comment_author ORDER BY F01 DESC LIMIT 0,10;

Requêtes administratives

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.

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.
Daniel Roch de SEOMIX en explique l’utilité :
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ée, inutile de garder ces informations en base de données, surtout avec plusieurs milliers de commentaires.

Supprimer les MetaPost inutilisées
Quand vous installez des plugins, ceux-ci stockent ses données dans la table postmeta, mais quand vous les supprimez, ces données « inutiles » reste dans la table. Pour les supprimer, il faut lancer cette requête :

DELETE FROM wp_postmeta WHERE meta_key=’VotreClef’;

Identifier les tags inutilisés
SELECT * FROM wp_terms wt
INNER JOIN wp_term_taxonomy wtt ON wt.term_id=wtt.term_id WHERE wtt.taxonomy=’post_tag’ AND wtt.COUNT=0;
Supprimer les commentaires indésirables
DELETE FROM wp_comments WHERE wp_comments.comment_approved = ‘spam’;
Supprimer tous les commentaires non-approuvés
DELETE FROM wp_comments WHERE comment_approved = 0
Désactiver les commentaires pour les vieux articles
Si vous ne voulez plus modérer les commentaires de vos vieux articles, vous pouvez spécifier qu’aucun commentaire ne peut être ajouté à un article :

UPDATE wp_posts SET comment_status = ‘closed’ WHERE post_date < ‘2014-01-01’

Etats des commentaires :
• open(ouverts),
• closed(fermés),
• ou registered_only (pour les membres seulement).

Activer/désactiver les rétroliens
UPDATE wp_posts SET ping_status = ‘open’;
UPDATE wp_posts SET ping_status = ‘closed’;

Vous pouvez également spécifier une limite inférieure pour les rétroliens, en ajoutant quelques clauses dans votre requête :

UPDATE wp_posts SET ping_status = ‘closed’ WHERE post_date < ‘2014-01-01’ AND post_status = ‘publish’;

Supprimer les Commentaires d’un article spécifique
Si vous avez des commentaires à supprimer suite à un problème de spam (par exemple), vous pouvez utiliser cette requête :

DELETE FROM wp_comments WHERE comment_author_url LIKE « %url% » ;

%url% devra représenter une partie de votre url

Supprimer les articles datant de plusieurs jours
Pour repérer les articles :
SELECT * FROM ‘wp_posts’
WHERE ‘post_type’ = ‘post’
AND DATEDIFF(NOW(), ‘post_date’) > X

Changer X par le nombre de jours souhaités
Pour les supprimer :
DELETE FROM ‘wp_posts’
WHERE ‘post_type’ = ‘post’
AND DATEDIFF(NOW(), ‘post_date’) > X

Changer le nom domaine d’un blog WordPress
En cas de changement de nom de domaine pour son blog, il faudra remplacer le nom de domaine sur votre site, mais également dans tous les liens internes :
UPDATE wp_options SET option_value = REPLACE(option_value, ‘http://www.ancien-site.com’, ‘http://www.nouveau-site.com’) WHERE option_name = ‘home’ OR option_name = ‘siteurl’;

UPDATE wp_posts SET guid = REPLACE(guid, ‘http://www.ancien-site.com’,’http://www.nouveau-site.com’);

UPDATE wp_posts SET post_content = REPLACE(post_content, ‘ http://www.ancien-site.com ‘, ‘ http://www.nouveau-site.com’);

Changer manuellement son mot de passe WordPress via SQL
UPDATE ‘wordpress’.’wp_users’ SET ‘user_pass’ = MD5(‘PASSWORD’) WHERE ‘wp_users’.’user_login’ =’admin’ LIMIT 1;
Chercher et remplacer du contenu dans vos articles
Une grosse boulette sur un article ? La première chose à faire : changer le contenu de celui-ci en 30 secondes :
UPDATE wp_posts SET ‘post_content’ = REPLACE (‘post_content’,’Ancien_contenuHTML’,’Nouveau_contenuHTML’);
Alléger sa base de données
WordPress stocke tout un tas de données temporaires dans sa base de données, qui ne sont pas toujours effacés. Il peut être utile de faire un peu de nettoyage de temps en temps.

DELETE FROM `wp_options` WHERE `option_name` LIKE (‘%_transient_%’)

Share.

About Author

Je ne suis pas tombée dans la marmite du SEO lorsque j'étais petite ! Par contre, j'y suis aujourd'hui (dans la marmite) et j'y suis bien :) Je glane les infos à droite et à gauche, je travaille sur certains sujets et je compte bien tout partager avec vous. Ma seule problématique : le temps n'est pas élastique et cela prend du temps de partager mes données !

Leave A Reply

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.