Supprimer / limiter les révisions d’articles de WordPress

Les révisions d’articles permettent de restaurer à une date précise la sauvegarde du billet en question. Bien que très pratique, cette fonctionnalité finit par encombrer la base de données après de nombreux enregistrements.

N.B : avant d’opérer une quelconque modification dans votre base de données, je vous recommande fortement de visionner le podcast Sauvegarder automatiquement votre base de données MySQL.

Il est donc conseillé d’effacer les révisions d’articles. Toutefois, pour aller plus loin, nous allons faire en sorte que les X dernières soient conservées pour allier performances et sécurité.

#1 – Effacer toutes les révisions d’articles

Exécutez la requête SQL ci-dessous pour supprimer la totalité des versions d’articles. Après cette action, il vous sera impossible de restaurer l’un d’eux à une date antérieure.

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

#2 – Effacer les révisions en fonction d’une date

Pour ne garder que l’historique récent de vos articles, préférez cette requête. La dernière ligne indique une date que vous pouvez modifier ; en l’occurrence, le 1er janvier 2010. Avant celle-ci, 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 < '2010-01-01';

Pour aller plus loin

Il est possible de désactiver le versionning des articles. A l’aide de votre client FTP favori, connectez-vous à la racine de votre site WordPress puis ouvrez wp-config.php.

Ajoutez ensuite la ligne suivante :

define('WP_POST_REVISIONS', false);

En indiquant un chiffre à la place du paramètre false, vous limiterez le nombre de sauvegardes – à 5 dans cet exemple. Idéal pour un système optimisé et sécurisé

define('WP_POST_REVISIONS', 5);

Les révisions d’articles constituent un atout majeur de WordPress. Il n’est pas rare de devoir revenir en arrière après une modification malencontreuse. Entre performances SQL et niveau de risques, à vous de trouver un juste milieu !

Crédits photo : mookxi

40 commentaires

  1. Mr Xhark

    Admettons que j’utilise :
    define(‘WP_POST_REVISIONS’, 5);

    Il me semble plutôt logique de supprimer les révisions >5, as tu une requête SQL en tête pour cette opération ?

  2. Olivier C

    Ouf, j’ai enfin compris un truc après avoir cherché pendant des semaines : il ne faut pas mettre le code n’importe où dans le fichier wp-config sinon, au mieux, cela ne marche pas… au pire, tous mes articles et pages étaient passés à la poubelle !

    J’ai finalement placé le code avant les clefs d’authentification et c’est OK…

    1. A-snowboard

      Juste un petit mot pour dire que tout a fonctionné pour moi !
      Mais comme le dit olivierC, il faut mettre le code avant les clef d’authentification. Sinon ça ne marche pas !

      Bonne soirée !

  3. royer

    Bonjour
    Impossible pour moi de trouver comment revenir sur une erreur. J’ai ajouter une photo a une galerie et puis après seule la dernière photo s’affiche (les autres ont disparues). C’a m’arrive souvent.
    A chaque fois il faut tout refaire car je ne sais pas comment revenir en arrière.
    ps: je suis nul en informatique et ne comprends pas les infos trop complexe.
    Si tu as la réponse, je te remercie à l’avance.
    Yann

  4. kindy

    Merci une fois de plus pour ses articles intéressent. Mais j’ai tenté cette requête mais à chaque fois j’ai une :
    Erreur SQL :

    ERREUR: erreur de syntaxe sur ou près de « a »
    LINE 1: DELETE a,b,c
    ^

    Dans l’instruction :
    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 < '2012-09-17';

    je sais pas si ma base n'a pas un problème et il es arriver même que j'ai eu envie de recharger un backup suite à un problème sur le blog. Et j'ai toujours un message d'erreur. Tu n'aurais pas une piste..
    merci par avance

  5. Fabrice

    Salut Aurélien,

    Merci de ces infos, j’utilise pour ma part dans le config:

    define(‘WP_POST_REVISIONS’, 2);
    define(‘EMPTY_TRASH_DAYS’, 3 );

    Sinon y a aussi WP-Optimize pour nettoyer et alléger la BDD

      1. doomer78

        Mettre à jour l’article/page permet d’afficher que les 5 dernières révisions, cela ne les supprimerait pas dans la BDD ? Je ne sais pas comment faire pour vérifier cela malheureusement…

  6. ANais

    Bonjour,
    Utilisant la version 3.5.1 de WordPress, je ne vois pas les révisions d’articles. Est-ce à dire que WordPress supprime maintenant automatiquement les anciennes versions des articles (donc plus de besoin de passer par le code sql donné)?
    Merci

    1. Aurélien Denis auteur de l’article

      Vérifies dans le menu Options de l’écran situé en haut à droite de ta fenêtre pour vérifier que les révisions ne sont pas masquées car rien n’a changé dans le core de WordPress à ce sujet.

  7. Anais

    Bonjour Bonjour,
    J’ai placé le code define(‘WP_POST_REVISIONS’, 2); dans mon fichier wp-config.
    Sur le test que je viens de faire en créant un article sur mon site, je vois bien que les deux dernières révisions restent affichées. Par contre, pour tous mes anciens articles (j’en ai certains avec des dizaines de révisions), il n’affichent pas les deux dernières révisions (mais tout encore). Faut-il faire autre chose pour les supprimer ?

  8. Anais

    C’est bon de mon côté.
    Comme dit dans mon comm précédent, j’ai placé le code define(‘WP_POST_REVISIONS’, 2); dans mon fichier wp-config, puis j’ai exécutée la requête pour supprimer les révisions et tout est bon. Merci

    1. Eskimon

      Pour supprimer TOUTES les révisions :

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

  9. Lise Brodeur

    Un gros merci M. Denis. Je viens de faire un nettoyage sur Wamp. De 1 642 ko (BDD antérieure), c’est passé à 575 ko. Une fois la ligne du code mise avant les clés dans wp-config.php, tout est fonctionnel aussi..En faisant des modifs dans certaines pages, seulement les 5 dernières s’affichent. J’en encore beaucoup de pages à créer :). Quel allégement, merci.
    Lise, Montréal

  10. Hubert Souchaud Mesmin

    Slt. On parle bien ici des revisions d’articles, pas de celles des Pages (statiques) de wp. Qu’en est-il pour les Pages, je ne vois rien pour les activer, existent-elles au-moins ces révisions de Pages? Merci

  11. Léon

    Bonsoir, je ne suis pas très fort encore avec wp. Où et comment faut-il exécuter la phase 1  » requête sql » ? Merci pour votre aide!

    1. lafeeluminelle

      Bonjour Léon,
      Moi je fais cette manip là : Va dont ton MySQL > WP_posts

      Là tu as des onglets et tu vas sur « Rechercher »> posts type > Revision (exécuter)
      La requête va te chercher toutes les révisions. Tu coches tout et X pour supprimer.

      Voilà.

      1. Journal

        Le soucis en faisant de cette façon, c’est que la suppression des enregistrements des tables wp_term_relationships et wp_postmeta qui sont liés à la révision ne seront pas supprimés. Au final il reste des lignes orphelines qui prennent inutilement de la place dans la base de données. C’est justement ce qu’on cherche à éviter.

  12. lafeeluminelle

    Bonjour Aurélien,
    J’essayais l’astuce pour empêcher les révisions en collant en fin de page :
    define(‘WP_POST_REVISIONS’, false); dans mon WP-Config.PHP mais ça n’a pas marché.

    Quand je suis allée sur mon admin et mon site j’avais une page toute blanche ! Alors j’ai remis l’ancienne version du fichier sans la ligne de code du coup.

    Est-ce que la ligne de code est toujours valable pour la WordPress 3.8.1 ou 2 ? Ou ai-je mal fais mon collage ?

    Merci

    1. Aurélien Denis auteur de l’article

      Il ne faut surtout pas mettre cette define en fin de fichier wp-config.php ! C’est d’ailleurs spécifié par le messageC’est tout, ne touchez pas à ce qui suit ! Bon blogging !.

      Avant oui, après non !

  13. sylvainbr

    Bonjour,

    Voici comment j’ai intégré votre code :
    ——————————————————-
    /** Type de collation de la base de données.
    * N’y touchez que si vous savez ce que vous faites.
    */
    define(‘DB_COLLATE’,  »);

    define(‘WP_POST_REVISIONS’, 5);

    /**#@+
    * Clefs uniques d’authentification et salage.
    *
    * Remplacez les valeurs par défaut par des phrases uniques !
    * Vous pouvez générer des phrases aléatoires en utilisant
    * {@link https://api.wordpress.org/secret-key/1.1/salt/ le service de clefs secrètes de WordPress.org}.
    * Vous pouvez modifier ces phrases à n’importe quel moment, afin d’invalider tous les cookies existants.
    * Cela forcera également tous les utilisateurs à se reconnecter.
    *
    * @since 2.6.0
    */
    define(‘AUTH_KEY’, …..pas mis pour raison de sécurité….
    ——————————————————————–
    Quand je veux modifier mon article je suis à 52 révisions (et non 5)

    Est-ce que le ménage se fait à chaque connexion avec un identifiant et mot de passe?

Laisser un commentaire