WordPress est piloté par une base de données MySQL, que ce soit pour les messages, les pages, les commentaires, les réglages, etc... MySQL est une base de données dite « relationnelle », disponible dans la plupart des services d'hébergement Web. Toutes les données de WordPress y sont stockées. Vous pouvez ainsi modifier l’aspect visuel de votre site sans pour autant affecter son contenu.

Si l'admin principal de WordPress est bien conçu, qu'il nous permet de contrôler et de modifier un grand nombre d'aspects de cette information avec facilité, il arrive parfois que nous ayons besoin d'effectuer des changements dans des centaines, voir des milliers d'enregistrements. En passant par l'admin de WordPress, effectuer ces changements peut vite se révéler très chronophage et amener un certain nombre d'erreurs.

Donc, la dernière option qu'il vous reste pour aller vite tout en maximisant votre productivité est de retrousser vos manches et mettre les mains directement dans la base de données MySQL.

Il y a des centaines de raisons pour éditer une base de données WordPress, mais certaines requêtes SQL sont plus indispensables que d'autres. En voici quelques une.

Important :

Votre base de données WordPress stocke chacun de vos articles écrits avec soin, tous les commentaires de vos fidèles lecteurs et tous les paramètres que vous avez utilisé pour personnaliser votre site. Donc, peu importe la confiance que vous avez dans votre capacité à utiliser ces requêtes SQL, s'il vous plaît, n'oubliez pas de sauvegarder votre base de données en premier.

Comment sauvegarder la base WordPress - PhpMyAdmin ?
Backing_Up_Your_Database ou en utilisant WP-DB-Backup Plugin qui vous permet d'automatiser la sauvegarde de votre base de données WordPress.

Allez dans phpMyAdmin, cPanel, Plesk ou par une autre méthode pour ouvrir votre base de données WordPress et trouver les tables correspondantes à votre WordPress ( wp_xxxxx ).


Utilisation :

Lorsque vous installez puis retirez des plugins ou des thèmes, ils font usage de "clés" pour stocker des données. Après avoir enlevé le plugin ou le thème, les données resteront à l'intérieur de la table _postmeta, ce qui bien sûr, n'est plus nécessaire. Changez "VotreMetaKey" par votre propre valeur avant d'exécuter cette requête.

DELETE FROM wp_postmeta WHERE meta_key = 'VotreMetaKey';

Champs personnalisés

Ajouter un champ personnalisé (Cutom Field) a vos posts et pages au sein de votre base de données WordPress ( wp_ ). Remplacez "VotreCutomField" par le nom votre choix et puis changez "MaValeur" par la valeur de votre choix.

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

Seulement pour les posts :

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

Seulement pour les pages :

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

Rechercher et remplacer du contenu au sein de la zone "post content" (wp_posts)

UPDATE wp_posts SET `post_content`
= REPLACE (`post_content`,
'Fan club de Pepito',
'Fan club de Granola');

Pour changer une URL dans la zone "post content" de WordPress, comme le lien d'un site que vous utilisez fréquemment et dont le nom de domaine a changé ou si vous changez vous-même, utilisez la requête suivante : (http://exemple.com/2011/11/mon-titre en http://nouvelexemple.com/2011/11/mon-titre)

UPDATE wp_posts SET `post_content`
= REPLACE (`post_content`,
'http://exemple.com/',
'http://nouvelexemple.com/');

Identifier les tags (mots clés) inutilisés

Dans une base de données WordPress, lorsque vous supprimez un ancien post, les mots clés (tags : bateau, voile, neserviraquunefois) resteront et apparaitront dans votre liste de tags. Cette requête vous permet de les identifier.

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 tags (mots clés) inutilisés

Encore une fois, s'il vous plaît faites une sauvegarde de votre base de données et assurez-vous que vous comprenez ce que vous faites. N'oubliez pas de remplacer 'wp_' avec le préfixe de votre table. (ex : monmien_terms, monmien_term_taxonomy et monmien_term_relationships)

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

Important : Après avoir supprimé tous les tags inutilisés et "la relation", vous devez optimiser ces tables pour récupérer l'espace inutilisé et défragmenter le fichier de données. Utilisez cette requête :

OPTIMIZE TABLE `wp_terms` , `wp_term_taxonomy` , `wp_term_relationships`;

Supprimer les commentaires indésirables (Spam)

DELETE FROM wp_comments WHERE wp_comments.comment_approved = 'spam';

Supprimer les commentaires "non approuvés"

DELETE FROM wp_comments WHERE comment_approved = 0

Désactiver les commentaires de vos vieux posts

UPDATE wp_posts SET comment_status = 'closed' WHERE post_date < '2011-01-01' AND post_status = 'publish';

( comment_status = 'closed' = fermé, mais vous pouvez les ouvrir en remplaçant la valeur par 'open' ou 'registered_only' par la suite. )

Supprimer les commentaires avec une URL spécifique

Si vous avez des commentaires spam qui contiennent tous la même URL, cette requête vous permet de les supprimer, en une seule fois.

DELETE from wp_comments WHERE comment_author_url LIKE "%spamurl%" ;

Désactivation ou activation des rétroliens/pings

Pour cette requête, spécifiez le comment_status : open, closed, ou registered_only.

Activer pour tous les utilisateurs

UPDATE wp_posts SET ping_status = 'open';

Désactiver pour tous les utilisateurs

UPDATE wp_posts SET ping_status = 'closed';

Activer pour tous les utilisateurs enregistrés

UPDATE wp_posts SET ping_status = 'registered_only';

Désactivation ou activation des rétroliens/pings avant une certaine date

UPDATE wp_posts SET ping_status = 'closed' WHERE post_date < '2010-01-01' AND post_status = 'publish';

Identifier et supprimer des posts qui ont plus de "XXX" jours

Si jamais vous avez besoin d'identifier et de supprimer des posts qui ont plus d'un certain nombre de jours, cette requête vous y aidera.

Exécuter cette requête, sans oublier de remplacer "XXX" par le nombre de jours que vous souhaitez:

SELECT * FROM `wp_posts`
WHERE `post_type` = 'post'
AND DATEDIFF(NOW(), `post_date`) > XXX

Pour supprimer tous les posts qui ont plus de "XXX" jours, exécutez cette requête:

DELETE FROM `wp_posts`
WHERE `post_type` = 'post'
AND DATEDIFF(NOW(), `post_date`) > XXX

ou

DELETE FROM wp_posts WHERE post_date < '2011-01-01 18:17:00' AND post_status = 'publish'

Supprimer les Révisions de Posts

Les révisions de posts permettent de restaurer une sauvegarde de votre écrit, à une date précise. Ils peuvent être très utiles, mais ils font aussi considérablement augmenter la taille de votre base de données MySQL. Vous pouvez supprimer manuellement les révisions de posts, mais une méthode beaucoup plus rapide serait d'utiliser cette requête SQL.

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

Si vous préférez garder l’historique récent de vos posts, utilisez cette requête en indiquant une date (ex : 2011-01-01) avant laquelle, toutes les sauvegardes seront supprimées.

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'
AND a.post_date < '2011-01-01';

Désactiver tous les plugins WordPress

Si vous avez déjà été confronté à un écran blanc et incapable de vous connecter à l'admin WordPress, après l'activation d'un nouveau plugin, ce code va certainement vous aider. Il permet de désactiver tous les plugins instantanément.

UPDATE wp_options SET option_value = 'a:0:{}' WHERE option_name = 'active_plugins';

Supprimer les "Shortcodes" inutiles

Les Shortcodes WordPress sont très utiles, mais quand vous cessez de les utiliser, leurs codes restent au sein de votre contenu. Voici une simple requête SQL pour se débarrasser de tout les shortcodes inutiles. Remplacer «vieuxshortcode» par votre propre shortcode.

UPDATE wp_post SET post_content = replace(post_content, '[vieuxshortcode]', '' ) ;

Changer vos Posts en Pages

UPDATE wp_posts SET post_type = 'page' WHERE post_type = 'post'

Changer vos Pages en Posts

UPDATE wp_posts SET post_type = 'post' WHERE post_type = 'page'

 

Changer la paternité d'un auteur sur ​​tous les Posts

La première chose que vous devez faire, c'est de récupérer l'ID de l'auteur dans WordPress. Vous pouvez utiliser cette commande SQL pour ça :

SELECT ID, display_name FROM wp_users;

Une fois que vous avez les anciens et les nouveaux identifiants, insérez la commande ci-dessous, sans oublier de remplacer 'NOUVEL_AUTEUR_ID' avec l'identifiant du nouvel auteur et 'ANCIEN_AUTEUR_ID' avec l'ancien.

UPDATE wp_posts SET post_author=NEW_AUTHOR_ID WHERE post_author=ANCIEN_AUTHOR_ID;

Changer le nom d'utilisateur "Admin" par défaut

Chaque installation de WordPress va créer un compte avec le nom d'utilisateur Admin par défaut. Pour une sécurité supplémentaire, vous pouvez le changer.

UPDATE wp_users SET user_login = 'VotreUserName' WHERE user_login = 'Admin';

Modifier l'URL de vos images

UPDATE wp_posts SET post_content = REPLACE (post_content, 'src="http://www.ancienne-url.com/images/', 'src="http://www.nouvelle-url.com/photos/');

Vous aurez aussi besoin de mettre à jour le GUID avec la requête suivante:

UPDATE wp_posts SET  guid = REPLACE (guid, 'http://www.ancienne-url.com/images/', 'http://www.nouvelle-url.com/photos/') WHERE post_type = 'attachment';

Réinitialiser manuellement votre mot de passe WordPress

UPDATE `WordPress`.`wp_users` SET `user_pass` = MD5('PASSWORD') WHERE `wp_users`.`user_login` =`admin` LIMIT 1;

Modifier l'URL de destination d'un site WordPress

Tout d'abord, il faut mettre à jour vos options WordPress avec le nouvel emplacement de votre blog, la première commande à utiliser est:

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

Ensuite, vous allez avoir besoin de fixer les URL de vos posts et pages sur WordPress. Les valeurs d'URL sont stockées comme des URL absolues plutôt que comme des URL relatives, vous devez donc utiliser la requête SQL suivante pour les modifier :

UPDATE wp_posts SET guid = replace(guid, 'http://www.ancien-site.com','http://www.nouveau-site.com');

Si vous avez lié en interne, à n'importe quel endroit dans vos posts ou pages des liens en utilisant des URL absolues, alors ces liens vont être dirigés vers un mauvais endroit après que vous ayez modifié l'emplacement de votre blog. Vous devez utiliser les commandes SQL suivantes afin de fixer l'ensemble des liens internes dans l'ensemble de vos posts/pages WordPress.

UPDATE wp_posts SET post_content = replace(post_content, 'http://www.ancien-site.com', 'http://www.nouveau-site.com');

Une fois que vous avez mis toutes ces requêtes SQL en action, la prochaine étape consiste à supprimer les cookies de votre navigateur puis de vous connectez à l'admin de votre site WordPress, en utilisant la nouvelle adresse.

Afin de rediriger tous les anciens liens de l'ancien domaine vers le nouveau domaine, utilisez la redirection permanente "301" dans un seul fichier .htaccess . Sinon vous perdrez définitivement tout lien durement gagné. Voici ce que le fichier doit contenir :

RewriteEngine on
RewriteCond %{HTTP_HOST} ^.ancien-site.com$ [OR]
RewriteCond %{HTTP_HOST} ^www.ancien-site.com
RewriteRule ^/?(.*)$ "http://www.nouveau-site.com/$1" [R=301,L]

Gros Mots

Dans les rares cas où vous décideriez de nettoyer vos jurons pour des raisons qui vous sont propres, vous pouvez rechercher des gros mots et les remplacer de manière permanente avec des orthographes astérisques et périls.

UPDATE wp_posts SET `post_content`
 = REPLACE (`post_content`,
' pute ',
' p*te ' );

Vous pouvez remplacer p*te par bidet, sans problème.


Après la restauration d'une base de données, vous pouvez vous retrouver avec des centaines de caractères bizarres. Si celle-ci est passée dans les pattes l'éditeur de texte qui converti les caractères UTF-8 dans certains autres jeux de caractères, comme ISO-8859-1.


“ = “ et ” = ” et ‘ = ‘ et ’ = ’ et – = – et — = — et - = - et … = …

Pour nettoyer ces caractères bizarres de la base de données WordPress (post_content et comment_content), exécutez les requêtes suivantes:

UPDATE wp_posts SET post_content = REPLACE(post_content, '“', '“');
UPDATE wp_posts SET post_content = REPLACE(post_content, '”', '”');
UPDATE wp_posts SET post_content = REPLACE(post_content, '’', '’');
UPDATE wp_posts SET post_content = REPLACE(post_content, '‘', '‘');
UPDATE wp_posts SET post_content = REPLACE(post_content, '–', '–');
UPDATE wp_posts SET post_content = REPLACE(post_content, '—', '—');
UPDATE wp_posts SET post_content = REPLACE(post_content, '-', '-');
UPDATE wp_posts SET post_content = REPLACE(post_content, '…', '…');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '“', '“');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '”', '”');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '’', '’');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '‘', '‘');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '–', '–');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '—', '—');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '-', '-');
UPDATE wp_comments SET comment_content = REPLACE(comment_content, '…', '…');

Pour les autres petits endroits où ces signes peuvent apparaitre, utilisez :

UPDATE [table_name] SET [col_name] = REPLACE([col_name], '…', '…');

Il suffit de remplacer [table_name] avec la table que vous voulez nettoyer, col_name avec le nom de la colonne, puis de reproduire ou de modifier la requête avec les remplacements de caractères.


WP 3.0 Database diagram

 

wp_db_schema