Управление ревизиями и автосохранением в WordPress 2.6
Автосохранения
Для одной записи доступно лишь одно автосохранение. Новые перезаписывают старые.
Автосохранение разрешено для всех записей и страниц, но оно не перезаписывает опубликованный контент. Автосохранение хранится как специальный тип ревизии, но не перезаписывает текущий пост.
Добавив в wp-config.php эту строку и заменив 60 на свое число (в секундах), мы сможем настроить период автосохранения. По умолчанию значение равно 60 секундам
define('AUTOSAVE_INTERVAL', 60);
Настройки ревизий
Такая опция есть, но по умолчанию она скрыта :-)
Эта константа может быть установлена в вашем wp-config.php (не забывайте пользоваться правильными редакторами), или специальным плагином (еще не видел таких)
Чтобы задать ее в файле конфигурации, добавьте строку
define('WP_POST_REVISIONS', ТУТ_БУДЕТ_ВАША_НАСТРОЙКА);
где ТУТ_БУДЕТ_ВАША_НАСТРОЙКА может принимать значения:
- true (по умолчанию), -1: хранить каждую ревизию
- false, 0: не сохранять никаких ревизий (кроме одного автосохранения на запись)
- (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
!!! Перед этим не забудьте сделать бэкап базы данных !!!
Использован и дополнен
Рубрики: Wordpress Метки: 2.6, Wordpress, ревизии
Распечатать
Связанные записи
36 комментариев
Трэкбеки и пингбеки
Комментарии не по теме удаляются! Читайте реадми дистрибутива, комментарии выше и FAQ! Прежде чем задавать вопрос, прочитайте это. Научитесь ценить чужое время!



16 июля 2008 в 15:51 (GMT+6)
Т.е. добавив это
define(‘WP_POST_REVISIONS’, ’5′);
я разрешу вордпрессу 5 раз делать автосохранение, и при этом, заметки о посте не будут плодится в базе данных, а будут перезаписывать старые версии?
16 июля 2008 в 15:54 (GMT+6)
не автосохранение, а 5 ревизий, из которых одна будет автосохранением. да не будут плодиться и старые будут перезатираться. я для эксперимента добавил в конфиг цифру “2″ и в записи где было 11 исправлений сделал еще одно изменение и сохранил. 9 самых старых ревизий “прибились в базе” и осталось только две последних. сохраняться при этом стало дальше намного быстрее
16 июля 2008 в 15:58 (GMT+6)
Ясно, спасибо.) Выходит, это решает проблему о которой столько шума? Насчет дублирования одного и того же поста при внесении изменений, которая появилась в бета-версиях.
16 июля 2008 в 16:07 (GMT+6)
@ AlexNote: да решает. особенно установка в “0″ :-) Вопрос в том почему это сразу не разрешили делать и пришлось рыться в Кодексе чтобы понять как от этого избавиться или настроить
17 июля 2008 в 14:27 (GMT+6)
Пока не поставила 2.6 не поняла, о каких ревизиях тут речь :)
Т.е. получается, что через некоторое время база данных будет забита этими ревизиями, которые будут тупо занимать в ней место?
17 июля 2008 в 15:05 (GMT+6)
@ sonika: так оно и есть. для этого и нужна команда их чистить. вручную в базе некрасиво все же делать. лучше бы это делать прямо из админки.
17 июля 2008 в 16:16 (GMT+6)
А я такой плагинчик сделал. Он тока альфа еще, но вроде пашет нормально :)
17 июля 2008 в 16:18 (GMT+6)
@ Roland Chanishvily: скачать не дает. перекидывает на . и еще стили и картинки на сайте не грузятся…
17 июля 2008 в 18:02 (GMT+6)
У меня там вообще половина записи потерялась 0_o
Починил, проверил – качается и лисой и осликом.
24 июля 2008 в 3:52 (GMT+6)
А можно ли совсем отключить эти ревизии?
24 июля 2008 в 9:49 (GMT+6)
@ Alex: если вы точно прочитали полностью ВНИМАТЕЛЬНО статью, то не задавали бы такой вопрос :-)
8 августа 2008 в 16:27 (GMT+6)
А так отключится автосохранение?
define('AUTOSAVE_INTERVAL', 0);8 августа 2008 в 18:58 (GMT+6)
Что произойдет если прописать define(‘AUTOSAVE_INTERVAL’, 0);?
9 августа 2008 в 2:47 (GMT+6)
Максим, а какую цель ты преследуешь? Если просто ради любопытства, то давно бы сам попробовал…
14 августа 2008 в 9:57 (GMT+6)
Не совсем понял: лучше вообще выставить “0″ в config и отключить ревизии, и не забивать базу или оставить парочку ревизий. Ревизии – только для удобства? т.е. типа написал в посте что-то не то, вернулся на ранее сохраненную?
14 августа 2008 в 11:41 (GMT+6)
да
14 августа 2008 в 12:57 (GMT+6)
Ясно. Спасибо.
Прочитал, по моему у Тараса в блоге, что каждая такая ревизия создает под себя в базе таблицу – это сколько же там “хлама” со временем накопится :(
Скачал плагин, установил и отключил вообще ревизии, что бы БД не захламлять :)
14 августа 2008 в 17:14 (GMT+6)
@ Олег: и не таблицу, а запись
15 сентября 2008 в 13:56 (GMT+6)
Вопрос: выставил в config “0″ но, в админке при создании записи указываются, что производятся ревизии. Не обращать внимания на эти сообщения? или это означает, что ревизии всетаки происходят? Спасибо.
15 сентября 2008 в 14:05 (GMT+6)
@Олег: а параметр раскомментировали ?
26 ноября 2008 в 0:46 (GMT+6)
Эх, нехорошо так удалять… Получаются .
Правильно будет так:
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`;
26 ноября 2008 в 1:25 (GMT+6)
Vladimir, добавил ссылку в пост
25 января 2009 в 19:41 (GMT+6)
Использовал третий способ, все прошло нормально. Спасибо
28 марта 2009 в 7:57 (GMT+6)
Спасибо большое, третий способоб все работает, ревизии чистит.
Но вот раскоменнтированая строчка
define(‘WP_POST_REVISIONS’, 0);
как то не очень помогает, все равно создаются.
29 апреля 2009 в 1:14 (GMT+6)
Подскажите как удалить старые записи из базы правильно ?
таблица wp_posts – 156Mb , нужно почистить , а то хостер уже жалуется… а стандартных способов для удаления не нашёл. Из админки не реально … даже 1-у запись с трудом удаляет … Хотеолось бы по дате удалять…
2008-04-10 или год месяц и главное только посты, а то тап и атачи и страницы.
Спасибо.
14 июня 2009 в 6:33 (GMT+6)
Поставил плагин, который вырезает ревизии вообще. Удалил созданные ранее. Спасибо.
5 марта 2010 в 21:10 (GMT+6)
Способ №1 (DELETE FROM wp_posts WHERE post_type = ‘revision’;), точно так же, как и простое удаление “Revision” из базы, на WP2.7 в моём случае, приводили к перекосу блога и появлению ошибки с указанием строки 1044 в файле wp_widget.php.
Способ №3 прошёл на ура.
Нужно только добавить, что удаление (DELETE) и оптимизацию (OPTIMIZE) нужно делать в два отдельных запроса к базе.
Локактусу мои благодарности! Просидел полдня, пока не наткнулся на эту статью.
5 марта 2010 в 21:42 (GMT+6)
Приношу прощения!
Способ №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Может что-то посоветуете?
16 марта 2010 в 1:32 (GMT+6)
может кто подскажет sql запрос для удаления лишнего индекса из таблицы wp_posts, при проверке этой таблицы выдаёт такое
Проблемы с индексами таблицы <code>wp_posts</code>Индексы wp_203_posts_guid_idx и wp_posts_guid_idx равнозначны и один из них может быть удалён.
28 апреля 2011 в 18:57 (GMT+6)
только что этот пост!! помог мне почистить версию 2.9.2 спасибо!!!! хотя изначально читал другие кейсы..этот оказался наиболее полный с примерами.супер!