Des requêtes SQL pour les administrateurs WordPress volume 2

(635 mots)

Suite de l’article que j’avais consacré à quelques requêtes courantes mySQL . Aujourd’hui nous allons voir des requêtes un peu plus complexes mais bien pratiques.

Comme d’habitude avec ce genre de requêtes, pensez à faire un backup avant de faire joujou. Si vous voulez intégrer les requêtes dans un plugin ou autre, passez par la classe wpdb mais n’oubliez pas la méthode prepare() pour sécuriser vos requêtes.

Dernière chose avant de commencer : n’oubliez pas de changer le préfixe wp_ des tables avec le votre.

Effacer des custom field en doublon

Lors d’une migration vers WordPress il peut arriver qu’un grand nombre de custom fields se retrouvent en double dans les posts. Pour y remédier voici une requête SQL :

SELECT*
      FROM (
        SELECT meta_id
        FROM wp_postmeta a
        WHERE a.meta_key = 'votre_clé'
        AND meta_id not in (
        SELECT min(meta_id)
        FROM wp_postmeta b
        WHERE b.post_id = a.post_id
        AND b.meta_key = 'votre_clé'
          )
       ) AS x

Oui mais toutes ces postmeta !

En même temps à rajouter de la postmeta on alourdit sa base. Du coup si vous voulez optimiser, il peut être utile de repérer celles qui ne servent plus (traces de plugins désinstallés par exemple) :

SELECT * 
FROM wp_postmeta pm 
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id 
WHERE wp.ID IS NULL;

Remarque : mieux vaut d’abord lister avant d’effacer et de risquer de supprimer les mauvaises données.

Ensuite si vous avez bien checké vous pouvez vous lancer et là magie magie :

DELETE pm
FROM wp_postmeta pm
LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL;  

Et par expérience je peux dire que la table postmeta est souvent riche en riens donc nettoyez tout cela!

Changement d’adresse

Vous avez un commentateur qui vous envoie un mail pour vous dire qu’il a changé d’URL et qu’il aimerait bien que vos backlinks s’adaptent. Cette requête peut vous servir :

UPDATE wp_comments 
SET comment_author_url = REPLACE( comment_author_url, 'http://ancienne-site.com', 'http://nouveau-site.com' );

Changement d’email

Le même cas de figure mais avec le mail cette fois. Cela vous donne :

UPDATE wp_comments 
SET comment_author_email = REPLACE( comment_author_email, 'ancien-email@adresse.com', 'nouvel-email@adresse.com' );

Un message important pour vos commentateurs

Vous avez un message important à communiquer à vos commentateurs (j’insiste sur le terme “important” car il vaut mieux éviter de les spammer), vous pouvez utiliser ceci :

SELECT DISTINCT comment_author_email FROM wp_comments;

Remarque : le DISTINCT vous enlève les doublons.

Lister des commentaires d’après leur contenu

Si jamais vous avez besoin de comptabiliser des occurrences, ceci peut vous servir :

SELECT * 
FROM wp_comments
WHERE comment_content LIKE  "%WordPress%"    

La requête vous permettra de lister tous les commentaires contenant le mot “WordPress”.

Virer les comment metas qui servent à rien

S’il y a bien une question qui revient concernant WordPress c’est :

Le poid de la base de données a-t-il un impact?

Déjà on a envie de dire “sur quoi?” mais de manière générale tout ce qui est rajouté dans la base à un impact sur la base et la base a impact sur le site.

Parmi les sources de moindre performance se trouve la flopée de meta et autres inutilités dues à la désinstallation de plugins qui n’ont pas prévu de faire le ménage derrière eux mais pas seulement !

DELETE FROM `wp_commentmeta`
WHERE `comment_id` 
NOT IN ( SELECT `comment_id`FROM `wp_comments` )

Les commentaires sont fermés.

Haut de page ▲