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’) > XChanger 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_%’)