Derniers Articles
Vous êtes ici : Accueil / Tutoriaux / Bases de données / Requêtes SQL pour nettoyer une base de données WordPress

Requêtes SQL pour nettoyer une base de données WordPress

Prérequis

Attention, ces requêtes ont été testées au moins pour la version 3.5 de WordPress, mais rien ne dit qu’elles seront toujours opérationnelles dans le futur, si la structure de WordPress évolue. Dans tous les cas, il est vivement recommandé d’effectuer une sauvegarde (un backup) des tables WordPress avant d’utiliser une des requêtes présentées ici.

Information pratique : par défaut toutes les tables WordPress sont préfixées par « wp_ ». Toutefois, lors de l’installation il est possible de modifier ce préfixe, notamment pour des raisons de sécurité. Si vous avez modifié les préfixes, il faudra penser à adapter les requêtes présentés sur cet article.

Alléger la table des articles en supprimant les révisions

Par défaut WordPress enregistre un article qui est en train d’être édité toutes les X secondes. Par ailleurs, à chaque fois que l’auteur sauvegarde un article, l’outil ajoute un enregistrement dans la base de données. On peut alors imaginer que pour 10 articles visibles sur un blog, il y peut-être 50 articles enregistrés en base. Si vous n’avez pas besoins de tout cela et que vous souhaitez purger la liste des révisions, il est possible d’effectuer la requête suivante:

DELETE a,b,c

FROM `wp_posts` a

LEFT JOIN `wp_term_relationships` b ON (a.ID = b.object_id)

LEFT JOIN `wp_postmeta` c ON (a.ID = c.post_id)

WHERE a.post_type = ‘revision’;

Purger les commentaires de spam

Les spams de commentaires sont courant sur un blog WordPress. Tous les commentaires qui ont été classé dans les spams peuvent être supprimés de temps en temps pour alléger la base. Pour cela, il est possible d’utiliser cette requête:

DELETE FROM `wp_comments`

WHERE `comment_approved` = ‘spam’;

Pour supprimer tous les commentaires en attentes de modération, il suffit d’utiliser la même requête en remplaçant ‘spam’ par ‘0′. Cela peut être utile lors d’une très grosse attaque de spam de commentaires. Et pour supprimer tous les commentaires publiés, il faut remplacer ‘spam’ par ‘1′.

Purger les données meta de commentaires supprimés

Il se peut que l’ont supprime des commentaires, comme par exemple avec la requête qui supprime les spam. Or, la table « wp_commentmeta » peut conserver inutilement des données liés à des commentaires qui n’existe plus. Pour s’assurer de ne garder que des données meta de commentaires existants, il convient d’effectuer cette requête:

DELETE FROM `wp_commentmeta`

WHERE `comment_id` NOT IN (

    SELECT `comment_id`

    FROM `wp_comments` )

Supprimer les entrées liées à Akismet

Très gourmand en espace disque, le plugin Akismet génère plusieurs données meta par commentaires. En supprimant ces données et particulièrement ceux liées à des spams qui ont été supprimés, il est possible d’économiser plusieurs Mo de données peu utiles.

DELETE FROM `wp_commentmeta`

WHERE `meta_key` LIKE ‘%akismet%’

Purger les données meta des articles qui n’existent plus

Si l’ont supprime des articles, il peut y avoir des données meta liées qui ne sont plus du tout utiles. Pour les supprimer et potentiellement gagner plusieurs Mo sur une base de données, il est possible d’utiliser cette requête:

DELETE pm

FROM `wp_postmeta` pm

LEFT JOIN `wp_posts` wp ON wp.ID = pm.post_id

WHERE wp.ID IS NULL

Supprimer tous les pingbacks

Si un blog ne souhaite plus afficher les pingbacks dans les commentaires, alors ils peuvent tous être supprimés en 1 seule requête:

DELETE FROM `wp_comments`

WHERE `comment_type` = ‘pingback’;

Supprimer un shortcode dans le contenu d’un article

Les shortcodes sont très pratiques pour ajouter des fonctionnalités spécifique à l’intérieur d’un article. Toutefois, il est fastidieux de devoir modifier tous les articles manuellement pour en supprimer un qui viens d’être supprimé. Pour en supprimer un, il suffit d’effectuer la requête suivant, en l’adaptant avec le nom du shortcode à supprimer:

UPDATE `wp_post`

SET `post_content` = REPLACE(`post_content`, ‘[vieux_shortcode]’,  » );

Supprimer un champ personnalisé

Il est possible de supprimer un champ personnalisé sur l’ensemble des articles où il est utilisé, en une seule requête. Pour supprimer un meta, il faut utiliser cette requête, à adapter avec le nom du champ personnalisé à supprimer:

DELETE FROM `wp_postmeta`

WHERE `meta_key` = ‘meta_a_supprimer’;

Supprimer les mots-clés non-utilisés

Les mots-clés, aussi appelé « tag », peuvent être assez nombreux sur un blog. Au fil du temps, si des articles sont supprimer ou s’ils dé-référence certains mots-clés, il peut y avoir des mots-clés qui ne sont associés à aucun article. Pour purger ces mots-clés qui ne sont plus utilisés par les articles, il convient d’utiliser les 3 requêtes suivantes:

DELETE FROM `wp_terms`

WHERE `term_id` IN (

                 SELECT `term_id`

                 FROM `wp_term_taxonomy`

                 WHERE `count` = 0 );

 

DELETE FROM `wp_term_taxonomy`

WHERE `term_id` NOT IN ( SELECT `term_id` FROM `wp_terms` );

 

DELETE FROM wp_term_relationships

WHERE term_taxonomy_id not IN ( SELECT term_taxonomy_id FROM wp_term_taxonomy );

Purger le cache des flux

Par défaut WordPress enregistre un cache des flux (RSS, ATOM …). Pour purger ce cache et ainsi libérer un grand nombre d’enregistrement de la table wp_options, il est possible d’effectuer cette requête:

DELETE FROM wp_options

WHERE option_name LIKE (‘_transient%_feed_%’)

Supprimer les vieux articles

Pour certains type de blog évènementiel, il convient de supprimer du contenu dépassé. Même si ce n’est pas recommandé en terme de référencement sur Google, il est possible de supprimer tous les vieux articles, vieux d’il y a plus de 365 jours (à adapter) grâce à cette requête:

DELETE FROM `wp_posts`

WHERE `post_type` = ‘post’

AND DATEDIFF(NOW(), `post_date`) > 365

Il est aussi possible de supprimer les articles à partir d’une date, plutôt qu’à partir d’un nombre de jours. Pour cela, il faut privilégier cette requête:

DELETE FROM `wp_posts`

WHERE `post_type` = ‘post’

AND `post_date` < ‘2010-12-31 23:59:59’

Supprimer l’information du « user agent » de chaque commentaire

Par défaut WordPress enregistrement le user agent de chaque visiteur qui laisse un commentaire. Cela permet d’avoir des informations utiles sur les visiteurs, notamment pour connaître les navigateurs les plus utilisés. Sur un blog de soutient informatique, ça peut même aider le blogueur à comprendre la configuration informatique du visiteur, dans un soucis de support informatique. Toutefois, dans la majorité des autres cas, cette information est superflue et prend de la place sur la base de données. Pour supprimer l’information des user agent pour les commentaires déjà enregistrés, il convient d’effectuer cette requête:

UPDATE `wp_comments`

SET `comment_agent` =  »;

Répondre

Votre adresse email ne sera pas publiée.

shared on wplocker.com