Управление ревизиями и автосохранением в WordPress 2.6

Автосохранения
Для одной записи доступно лишь одно автосохранение. Новые перезаписывают старые.
Автосохранение разрешено для всех записей и страниц, но оно не перезаписывает опубликованный контент. Автосохранение хранится как специальный тип ревизии, но не перезаписывает текущий пост.

Добавив в wp-config.php эту строку и заменив 60 на свое число (в секундах), мы сможем настроить период автосохранения. По умолчанию значение равно 60 секундам

define('AUTOSAVE_INTERVAL', 60);

Настройки ревизий
Такая опция есть, но по умолчанию она скрыта :-)
Эта константа может быть установлена в вашем wp-config.php (не забывайте пользоваться правильными редакторами), или специальным плагином (еще не видел таких)

Чтобы задать ее в файле конфигурации, добавьте строку

define('WP_POST_REVISIONS', ТУТ_БУДЕТ_ВАША_НАСТРОЙКА);

где ТУТ_БУДЕТ_ВАША_НАСТРОЙКА может принимать значения:

  1. true (по умолчанию), -1: хранить каждую ревизию
  2. false, 0: не сохранять никаких ревизий (кроме одного автосохранения на запись)
  3. (int) > 0: как много ревизий хранить на одну запись (+1 на автосохранение). Старые ревизии автоматически удаляются.

Например эта запись означает создавать не более 5 ревизий

define('WP_POST_REVISIONS', 5);

а эта отключает их вообще

define('WP_POST_REVISIONS', 0);

Метод хранения ревизий

Ревизии хранятся в таблице записей.

Ревизии хранятся как дочерние к связанной записи (то же самое что делается и для вложений). Мы получаем статус post_status ‘inherit’, тип post_type ‘revision’, и имя post_name {parent ID}- revision(-#) для обычных ревизий и {parent ID}-autosave для автосохранений.

Плагины могут настраивать какие поля (с ограничениями) являются версией. По умолчанию, WP следит за изменениями в заголовке, авторе, содержании, цитате.

Управление ревизиямии
Удаление: Существует API функция для удаления ревизий, но у нее нет пользовательского интерфейса (UI). Это конечно можно изменить. (Я пока что плагинов не видел для этого…)

Первый плагин для управления ревизиями

Второй плагин для управления ревизиями

Третий плагин (просто отключает ревизии). для тех, кому лень править конфиг

Удалить все ревизии вручную можно командой SQL (в пхпмайдмин-е например)

Способ 1

	DELETE FROM wp_posts WHERE post_type = 'revision';

Способ 2

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'

После выполнения команд нужно выполнить оптимизацию таблиц
Способ 3

DELETE `p`, `pm`, `c`, `tr`
    FROM `wp_posts` AS `p`
        LEFT JOIN `wp_postmeta` AS `pm`
            ON `p`.`ID` = `pm`.`post_id`
        LEFT JOIN `wp_comments` AS `c`
            ON `p`.`ID` = `c`.`comment_post_ID`
        LEFT JOIN `wp_term_relationships` AS `tr`
            ON `p`.`ID` = `tr`.`object_id`
    WHERE 
        `p`.`post_type` = 'revision';

OPTIMIZE TABLE
    `wp_posts`,
    `wp_postmeta`,
    `wp_comments`,
    `wp_term_relationships`;

источник

где wp_posts и т.д. означает что у вас префикс таблиц wp_.

Если он у вас отличается, то впишите свой! Например: wp26_posts

!!! Перед этим не забудьте сделать бэкап базы данных !!!

Использован источник на английском из Кодекса и дополнен информацией от Lester Chan

Связанные записи

37 комментариев на запись “Управление ревизиями и автосохранением в WordPress 2.6”

  1. AlexNote 16 июля 2008 в 15:51

    Т.е. добавив это
    define(‘WP_POST_REVISIONS’, ‘5’);
    я разрешу вордпрессу 5 раз делать автосохранение, и при этом, заметки о посте не будут плодится в базе данных, а будут перезаписывать старые версии?

  2. Lecactus 16 июля 2008 в 15:54

    я разрешу вордпрессу 5 раз делать автосохранение

    не автосохранение, а 5 ревизий, из которых одна будет автосохранением. да не будут плодиться и старые будут перезатираться. я для эксперимента добавил в конфиг цифру «2» и в записи где было 11 исправлений сделал еще одно изменение и сохранил. 9 самых старых ревизий «прибились в базе» и осталось только две последних. сохраняться при этом стало дальше намного быстрее

  3. AlexNote 16 июля 2008 в 15:58

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

  4. Lecactus 16 июля 2008 в 16:07

    @ AlexNote: да решает. особенно установка в «0» :-) Вопрос в том почему это сразу не разрешили делать и пришлось рыться в Кодексе чтобы понять как от этого избавиться или настроить

  5. sonika 17 июля 2008 в 14:27

    Пока не поставила 2.6 не поняла, о каких ревизиях тут речь :)
    Т.е. получается, что через некоторое время база данных будет забита этими ревизиями, которые будут тупо занимать в ней место?

  6. Lecactus 17 июля 2008 в 15:05

    @ sonika: так оно и есть. для этого и нужна команда их чистить. вручную в базе некрасиво все же делать. лучше бы это делать прямо из админки.

  7. Roland Chanishvily 17 июля 2008 в 16:16

    А я такой плагинчик сделал. Он тока альфа еще, но вроде пашет нормально :)
    Автоматическое Управление Версиями (Ревизиями) В WordPress 2.6

  8. Lecactus 17 июля 2008 в 16:18

    @ Roland Chanishvily: скачать не дает. перекидывает на http://chanishvili.org:88/files/rc_revmngr.zip . и еще стили и картинки на сайте не грузятся…

  9. Roland Chanishvily 17 июля 2008 в 18:02

    У меня там вообще половина записи потерялась 0_o
    Починил, проверил — качается и лисой и осликом.

  10. Alex 24 июля 2008 в 3:52

    А можно ли совсем отключить эти ревизии?

  11. Lecactus 24 июля 2008 в 9:49

    @ Alex: если вы точно прочитали полностью ВНИМАТЕЛЬНО статью, то не задавали бы такой вопрос :-)

  12. Максим 8 августа 2008 в 16:27

    А так отключится автосохранение?
    define('AUTOSAVE_INTERVAL', 0);

  13. Максим 8 августа 2008 в 18:58

    Что произойдет если прописать define(‘AUTOSAVE_INTERVAL’, 0);?

  14. Alexpts 9 августа 2008 в 2:47

    Максим, а какую цель ты преследуешь? Если просто ради любопытства, то давно бы сам попробовал…

  15. Олег 14 августа 2008 в 9:57

    Не совсем понял: лучше вообще выставить «0» в config и отключить ревизии, и не забивать базу или оставить парочку ревизий. Ревизии — только для удобства? т.е. типа написал в посте что-то не то, вернулся на ранее сохраненную?

  16. Lecactus 14 августа 2008 в 11:41

    Ревизии — только для удобства?

    да

  17. Олег 14 августа 2008 в 12:57

    Ясно. Спасибо.
    Прочитал, по моему у Тараса в блоге, что каждая такая ревизия создает под себя в базе таблицу — это сколько же там «хлама» со временем накопится :(
    Скачал плагин, установил и отключил вообще ревизии, что бы БД не захламлять :)

  18. Lecactus 14 августа 2008 в 17:14

    @ Олег: и не таблицу, а запись

  19. Олег 15 сентября 2008 в 13:56

    Вопрос: выставил в config «0» но, в админке при создании записи указываются, что производятся ревизии. Не обращать внимания на эти сообщения? или это означает, что ревизии всетаки происходят? Спасибо.

  20. Lecactus 15 сентября 2008 в 14:05

    @Олег: а параметр раскомментировали ?

  21. Vladimir 26 ноября 2008 в 0:46

    DELETE FROM wp_posts WHERE post_type = ‘revision’;

    Эх, нехорошо так удалять… Получаются висячие таксономии.

    Правильно будет так:
    DELETE `p`, `pm`, `c`, `tr`
    FROM `wp_posts` AS `p`
    LEFT JOIN `wp_postmeta` AS `pm`
    ON `p`.`ID` = `pm`.`post_id`
    LEFT JOIN `wp_comments` AS `c`
    ON `p`.`ID` = `c`.`comment_post_ID`
    LEFT JOIN `wp_term_relationships` AS `tr`
    ON `p`.`ID` = `tr`.`object_id`
    WHERE
    `p`.`post_type` = 'revision';
    OPTIMIZE TABLE
    `wp_posts`,
    `wp_postmeta`,
    `wp_comments`,
    `wp_term_relationships`;

  22. Lecactus 26 ноября 2008 в 1:25

    Vladimir, добавил ссылку в пост

  23. Михаил 25 января 2009 в 19:41

    Использовал третий способ, все прошло нормально. Спасибо

  24. KveSteR 28 марта 2009 в 7:57

    Спасибо большое, третий способоб все работает, ревизии чистит.
    Но вот раскоменнтированая строчка
    define(‘WP_POST_REVISIONS’, 0);
    как то не очень помогает, все равно создаются.

  25. NuN 29 апреля 2009 в 1:14

    Подскажите как удалить старые записи из базы правильно ?
    таблица wp_posts — 156Mb , нужно почистить , а то хостер уже жалуется… а стандартных способов для удаления не нашёл. Из админки не реально … даже 1-у запись с трудом удаляет … Хотеолось бы по дате удалять…
    2008-04-10 или год месяц и главное только посты, а то тап и атачи и страницы.
    Спасибо.

  26. BarSug 14 июня 2009 в 6:33

    Поставил плагин, который вырезает ревизии вообще. Удалил созданные ранее. Спасибо.

  27. oldoctober.com 5 марта 2010 в 21:10

    Способ №1 (DELETE FROM wp_posts WHERE post_type = ‘revision’;), точно так же, как и простое удаление «Revision» из базы, на WP2.7 в моём случае, приводили к перекосу блога и появлению ошибки с указанием строки 1044 в файле wp_widget.php.

    Способ №3 прошёл на ура.

    Нужно только добавить, что удаление (DELETE) и оптимизацию (OPTIMIZE) нужно делать в два отдельных запроса к базе.

    Локактусу мои благодарности! Просидел полдня, пока не наткнулся на эту статью.

  28. oldoctober.com 5 марта 2010 в 21:42

    Приношу прощения!
    Способ №3 выдал ту же ошибку, но только после переустановки базы:
    Warning: array_keys() [function.array-keys]: The first argument should be an array in Z:\home\oldoctober.com\www\ru\wp-includes\widgets.php on line 1044

    Может что-то посоветуете?

  29. Dmitriy 16 марта 2010 в 1:32

    может кто подскажет sql запрос для удаления лишнего индекса из таблицы wp_posts, при проверке этой таблицы выдаёт такое

    Проблемы с индексами таблицы <code>wp_posts</code>
    Индексы wp_203_posts_guid_idx и wp_posts_guid_idx равнозначны и один из них может быть удалён.

  30. Sergei 28 апреля 2011 в 18:57

    только что этот пост!! помог мне почистить версию 2.9.2 спасибо!!!! хотя изначально читал другие кейсы..этот оказался наиболее полный с примерами.супер!

Трэкбеки и пингбеки

  1. Автоматическое Управление Версиями (Ревизиями) В WordPress 2.6 | Программлю за еду!
  2. Управление версиями (ревизиями) - Русифицированные плагины для WordPress (ВордПресс)
  3. Интересно прочитать о WordPress 2.6 | Блог о Wordpress от Тараса
  4. WordPress 2.6 - новые возможности движка.
  5. Обновление WordPress (версия 2.6)
  6. Игры с Интернетом - Искариот - 30 серебренников за Интернет
  7. svsdvd | Зеленый кофе