Как отключить, ограничить, удалить ревизии WordPress

При создании, редактировании и сохранении статей и их черновиков в WordPress по умолчанию автоматически создаются резервные копии записей, обычно именуемые как Pевизии или Редакции (revisions).
Сохранение ревизий дело конечно полезное, так как например при ошибках в форматировании материала, сбоях вашего компьютера или сервера вам предоставляется возможность восстановить любую из предыдущих версий вашей записи. Но функционал сохранения ревизий имеет и отрицательную сторону.

Ревизии, редакции записей WordPress


Ведь все резервные копии (ревизии, редакции) сохраняются в базе данных вашего блога, в таблице wp_posts. И если у вас создано очень много записей, и при этом они часто редактировались, то размер базы данных окажется уж слишком большим. Кроме этого замедлится выполнение запросов к базе данных.

Увидеть список доступных ревизий Вы можете в нижней части страницы редактирования записей:

Ревизии, редакции записей WordPress

Ревизии, редакции записи WordPress

Отключить, ограничить, удалить ревизии WordPress оказывается совсем не сложно.
Давайте все разберем по порядку на примере WordPress 3.3.1.

Но только не забудьте перед внесением модификаций создать резервную копию базы данных!

Отключение ревизии в WordPress

Для того, чтобы отключить создание ревизий (редакций), нужно добавить одну строчку в файл wp-config.php

        define('WP_POST_REVISIONS', 0);

или:

        define('WP_POST_REVISIONS', false);

Есть еще и другой вариант отключения ревизий — изменить одно из значений с «true» на «0» или «false» в функции wp_functionality_constants(), которая находится в файле /wp-includes/default-constants.php

function wp_functionality_constants( ) {
        ...

        if ( !defined('WP_POST_REVISIONS') )
                define('WP_POST_REVISIONS', false);
        ...

Ограничить количество ревизий в WordPress

Для того, чтобы ограничить количество ревизий (редакций), нужно добавить одну строчку в файл wp-config.php, как было при отключении ревизий, но вместо значения «0» или «false» указать целое число:

        define('WP_POST_REVISIONS', 3);

В этом случае будет создаваться максимум 3 ревизии на одну статью, плюс одна копия «Автосохранение».

Заметка на память:
Внесение выше указанных изменений сразу не уменьшит количество ревизий, которые уже существуют в базе данных. Но изменения вступят в силу при обновлении уже существующих записей, причем по отдельности. Они также будут учтены при создании новых записей. Еще стоит учесть, что в режиме редактирования кроме ревизий в базе данных каждые 60 секунд будет записываться одна единственная копия записи как «Автосохранение».

Удалить все ревизии WordPress из базы данных

Если ваш блог существует уже давно и в нем много записей, то не помешает оптимизировать его базу данных, удалив ранее созданные ревизии (редакции), и тем самым уменьшить размер таблицы wp_posts.

Внимание! Не забудьте перед удалением всех ревизий создать резервную копию базы данных! Иначе восстановить удаленные ревизии уже будет не возможно.

Итак, нам понадобится выполнить несколько действий:

1. Войдите в панель управления базами данных, например в phpMyAdmin;
2. Выберите по имени базу данных, которая используется вашим блогом;
3. Кликните по кнопке (или закладке) с надписью «SQL» (обычно она находится вверху страницы);
4. В поле для SQL-запросов введите этот запрос:

DELETE FROM wp_posts WHERE post_type = "revision";

5. Нажмите кнопку «Ok», чтобы выполнить запрос;

Однако приведенный выше пример SQL-запроса удалит лишь ревизии из таблицы wp_posts, но не удалит из других таблиц связи с ними, поэтому для полного удаления ревизий и соответствующих связей стоит выполнить такой запрос:

DELETE p,m,r FROM wp_posts p
LEFT JOIN wp_postmeta m ON (p.ID = m.post_id)
LEFT JOIN wp_term_relationships r ON (p.ID = r.object_id)
WHERE p.post_type = 'revision'

Вот и все. Теперь база данных вашего блога, а конкретнее таблица wp_posts, намного уменьшилась в размере.

Напоследок хочу сказать, что приведенный выше пример удаления ревизий (редакций) является самым простым и не гибким. Возможно Вы захотите удалить не все ревизии, а выборочно, например оставив в каждой записи по три последних редакции. В таком случае придется либо выполнить более совершенный запрос в базе данных, либо воспользоваться специальным плагином. Благо плагинов для управлением ревизиями и базами данных существует предостаточно.

Метки: WordPress, ревизии, редакции

Поделитесь материалом с другими, воспользуйтесь этими кнопками:
Получать обновления и новые материалы блога по E-mail

41 комментарий к “Как отключить, ограничить, удалить ревизии WordPress”

  1. esst:

    Хорошая статья. Я до сих пор и не знал, что можно весь редакционный хлам из базы данных удалить так просто одной командой, все хотел подобрать плагин какой нибудь. Но теперь и не буду плагин ставить для ревизий, а то итак уже очень много плагинов наставил.

  2. esst:

    извиняюсь, я там неглядя английскими написал, хотел написать «одной командой» :(

  3. Юрий:

    Плагин wp-optimize, если не ошибся в обозначении, тоже помогает, но ваш вариант получше будет.

    • Да, есть такой, WP-Optimize. Но кроме него еще и другие есть плагины, которые помогают настроить управление ревизиями, почистить базу данных и т.д. Я сам лично просто предпочитаю не использовать много плагинов, поэтому все, что не слишком сложно и что не приходится делать слишком часто, делаю вручную :)

  4. Евгений:

    Отлично! Спасибо, удалил 287 ревизий!

    • Поздравляю! :)
      Мне на днях один чел отписывался, что мол удалил около 2000 ревизий и потом испугался, когда увидел, что на сервере в базе данных места много стало, подумав, что базу грохнули, а потом понял, что это за два года у него столько хлама накопилось :)

  5. Простой:

    Классная статья! )) Ревизии удалены.

  6. Rymljanyn:

    Отлично узнавать новое и нужное новичку. Автору СПС

  7. Natalya:

    Ох непростая это работа — изучать wordpress. Я даже и не предполагала, что у меня столько черновиков накопилось!

  8. Михаил:

    Спасибо! Я тоже не думал, что старья храню, хотя догадывался =)
    Теперь буду убирать =)

  9. Леся:

    Полезная статья и вовремя — как раз мучилась с одним своим сайтом на вордпрессе как уменьшить БД

  10. bumer:

    Сколько должны весть база данных вордпресс, чтобы она медленей грузилась?
    У меня было около 100 записей, в приницпе все норм было. Я так думаю если будет более 2000 записей, то бд возможно будет медленей грузится. Но тут и на сайт надо будет смотреть по другому тогда.

    • Скорость работы БД зависит не только от ее размера, а от многих факторов, начиная от скорости работы самого хостинга, типа тарифного плана, но как правило больше всего начинаются тормоза, когда в БД очень много записей и таблицы БД сильно дефрагментированы (т.е. если очень много раз в таблицах производились удаления, добавления, изменения записей).
      Решение проблем: кроме удаления лишнего хлама нужно обязательно регулярно производить «нормализацию» отдельных таблиц, ну или всей БД вцелом. Это делается либо вручную из панели управления базой данных, либо скриптами, которые запускаются по расписанию (CRON-задания).

      • Анна:

        Владимир, а по поводу последнего: «регулярно производить нормализацию отдельных таблиц или БД целиком…» есть у Вас мануал? Дайте ссылку на такую статью.
        И что, для небольших|молодых сайтов это тоже актуально?

        • Анна, если ты умеешь пользоваться phpMyAdmin, ну или чем-нибудь другим, для управления базами данных MySQL, то и статьи никакой не нужно — там нужно выбрать базу, затем выбрать все (или выборочно) таблицы и выбрать режим действия «Оптимизировать таблицу». Вот и все.
          Тем более, что для небольших сайтов, где не очень часто меняется контент и не добавляются комментарии по нескольку сотен в день, до достаточно 1-2 раза в месяц проделывать эту процедуру.

  11. Алексей:

    Спасибо за статью! займусь чисткой!

  12. kapten:

    Много раз вспоминал про ревизии в вордпрессе, все руки не доходили почистить. Спасибо за подсказку, сейчас почистим у себя.

  13. Алексей:

    Я на втором сайте так и сделал, все работает

  14. Rockyou:

    Мне нравится наоборот, что вордпресс сам автосохраняет статьи, превращает их в черновики. Всякое бывает, например, ошибка браузера, кошка провод заденет, кофе на клавиатуру прольешь. Впрочем, в некоторых случаях приходится проделывать такие манипуляции.

  15. Ирина:

    Спасибо за статью, я совсем новичок и , к сожалению, у меня не получилось удалить редакции статей. Помогите разобраться. Еще у меня есть проблема : пропала строка форматирования (с кнопками) текстовом в редакторе. Теперь пропала возможность редактирования текстов. Очень прошу — Помогите. Не могу найти , как с этим справиться? Спасибо заранее

    • Ирина, напишите подробнее, что Вы делали, после чего Вам не удалось удалить редакции. Пробовали ли Вы выполнить SQL-запрос в панели управления базой данных?

      DELETE FROM wp_posts WHERE post_type = "revision";
      

      Этот пример учитывает, что префикс таблиц вашей базы данных таков: «wp_». Если у Вас префикс другой, то просто замените в запросе на ваш префикс.

      По поводу «пропала строка форматирования (с кнопками)»…
      Вспомните, что Вы делали в последнее время на сайте, после чего пропали элементы форматирования.
      Если ставили или активировали какие-то новые плагины, то отключите их, и проверьте, появились ли элементы форматирования.
      Если у Вас есть бэкапы сайта, то сверьте содержимое последних бэкапов с нынешними файлами вашего блога.

      Не забывайте всегда делать бэкапы сайта (включая бэкап базы данных) перед каждым важным изменением: установкой плагинов, обновлением плагинов, обновлением движка блога и т.п.).

  16. Артём:

    Беда, wordpress версии 3.5.1 не удалось отключить сохранение ревизий ни одним из приведённых выше способов? Почему так? Эта информация не актуальная для обновлённой версии?

    • Артём, а какими конкретно способами Вы пользовались? Можно подробнее? Описанные здесь методы работают и на WordPress 3.5.1 — проверено.

      • Женя:

        Дело в том, что начиная с указанной версии в файле wp-config.php уже не присутствует такая строчка, а вынесена в другой файл default-constants.php , там в строке define (‘WP_POST_REVISIONS’, true); меняем значение на define (‘WP_POST_REVISIONS’, false);

        • Женя,
          в файле default-constants.php (даже в WordPress 3.6 RC1) всего лишь идет проверка, объявлена ли константа WP_POST_REVISIONS ранее, и если она нигде не была объявлена (например в файле wp-config.php), то она объявляется в файле default-constants.php:

          if ( !defined('WP_POST_REVISIONS') )
             define('WP_POST_REVISIONS', true);
          

          Так что можно объявлять WP_POST_REVISIONS как и раньше, в файле wp-config.php. В отношении ревизий все будет работать по прежнему алгоритму. Ну а для подстраховки можно конечно изменить значения в обоих файлах.

          Другое дело, если в более новых версиях уберут проверку, и в файле default-constants.php константа WP_POST_REVISIONS будет объявляться без проверки, то естественно нужно уже будет менять ее значение именно в файле default-constants.php.

          • влад:

            Владимир, подскажи пожалуйста, где находится этот файл — default-constants.php
            У меня в файле wp-config.php строчки — define(‘WP_POST_REVISIONS’, false); — нет
            и ничего, где бы упоминалось REVISION
            А найти default-constants.php не получается. Пробовал через Filezilla устанавливал фильтр, но что-то не так возможно, что этого файла у меня на сервере нет.

          • влад:

            Нашёл, после долгого сёрчинга по WP.org этот файл — default-constants.php,
            но там тоже нет никаких строк связанных с REVISIONS

          • По умолчанию в wp-config.php нет ничего по ограничению ревизий. Поэтому нужно самому добавить в wp-config.php строчку

            define('WP_POST_REVISIONS', 0);
            

            Только не добавляйте ее в самый конец, а добавьте где-то в середине, например после строки

            define('DB_COLLATE', '');

            или после

            define('DB_COLLATE', 'utf8_general_ci');

  17. Рамиля:

    Спасибо большое, Владимир, за статью! Всё так просто и доступно написано, что и я (а мне 67) сумела без проблем, по Вашим подсказкам, удалить лишний балласт (более 4000 ревизий!).
    Между прочим, простота и доступность изложения — сестра таланта и ума!

    • Анна К.:

      Согласна с Вами.
      Подписалась на обновления материалов этого сайта, потому что, как ни странно (ведь вроде бы здесь о программировании), даже новичкам типа нас в каждой статье все понятно объясняется.

  18. Андрей:

    А можно как-то удалить не все ревизии, а оставить последние 3 — 4 к каждой статье???

    • Можно конечно же, но через MySQL это получится довольно сложный или комбинированный запрос, при выполнении которого, допустив ошибки, можно угробить БД. Поэтому с моей точки зрение оптимальным решением будет либо использовать PHP-скрипт, либо воспользоваться готовым плагином, которых много в сети.
      С другой точки зрения вопрос — а зачем вам оставлять какие-то ревизии скажем так к записям со сроком в несколько месяцев или даже недель? 99.9% вы не будете ими пользоваться, я уверен. Так что лучше удалить все, а на будущее в wp-config.php добавить например для 3-х ревизий ограничение:

      define('WP_POST_REVISIONS', 3);
      

  19. влад:

    В phpMyAdmin, есть строка «Показать данный запрос снова» по умолчанию
    она активна, нужно-ли убирать галочку в этой строке и что это означает.

    • Если честно, то я никогда на эту фишку не обращал внимания. Да к тому же она не на всех конфигурациях MySQL+phpMyAdmin видна, и не всегда работает соответствующим образом. Так что на нее можете не обращать внимания.

  20. Олег:

    Спасибо Владимир, очень помогло, избавился от лишнего мусора.

  21. Евгений:

    У меня вопрос, когда ввел команду:
    DELETE p,m,r FROM wp_posts p
    LEFT JOIN wp_postmeta m ON (p.ID = m.post_id)
    LEFT JOIN wp_term_relationships r ON (p.ID = r.object_id)
    WHERE p.post_type = ‘revision’

    У меня выскочило сообщение: удалено 1 строка. Хотя при выполнении команды:
    DELETE FROM wp_posts WHERE post_type = «revision»;
    было удалено около 550
    Собственно вопрос: это нормально?
    Спасибо

    • Попробуйте явно указать, что требуется удаление всех записей, подходящих под ваши условия в запросе используя символы «.*», например так:
      DELETE p.*,m.*,r.* FROM wp_posts p …

  22. Женя:

    Здравствуйте, скажите пожалуйста, а что делать, если пишет, что таблицы wp_posts нет?

    • Возможно в вашей базе данных другой префикс таблиц, не «wp_», и как вариант, возможно вы соединяетесь с другой базой данных, в которой реально нет такой таблицы. Зайдите в БД и проверьте.

Оставить комментарий к Алексей

Уважаемые посетители, пожалуйста, пишите осмысленные и исчерпывающие комментарии. Короткие фразы типа «спасибо автору», «возьму на заметку», «мне помогло» и т.п. будут удаляться. Исключение, когда Вы отвечаете на чей-то вопрос или благодарите за помощь.

Ссылки на Ваш сайт получат статус DoFollow после третьего комментария.

Для вставки кода в комментарии можно использовать BB-коды:
[text] [/text], [php] [/php], [html] [/html]

Подписаться на обновления блога 4remind.ru по RSS
Новости блога в социальных сетях

4remind.ru - персональный блог вебмастера



Наверх
Наверх