Управление ревизиями и автосохранением в 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
!!! Перед этим не забудьте сделать бэкап базы данных !!!
Использован
Связанные записи
37 комментариев на запись “Управление ревизиями и автосохранением в WordPress 2.6”
Трэкбеки и пингбеки
- Автоматическое Управление Версиями (Ревизиями) В WordPress 2.6 | Программлю за еду!
- Управление версиями (ревизиями) - Русифицированные плагины для WordPress (ВордПресс)
- Интересно прочитать о WordPress 2.6 | Блог о Wordpress от Тараса
- WordPress 2.6 - новые возможности движка.
- Обновление WordPress (версия 2.6)
- Игры с Интернетом - Искариот - 30 серебренников за Интернет
- svsdvd | Зеленый кофе
Т.е. добавив это
define(‘WP_POST_REVISIONS’, ‘5’);
я разрешу вордпрессу 5 раз делать автосохранение, и при этом, заметки о посте не будут плодится в базе данных, а будут перезаписывать старые версии?
не автосохранение, а 5 ревизий, из которых одна будет автосохранением. да не будут плодиться и старые будут перезатираться. я для эксперимента добавил в конфиг цифру «2» и в записи где было 11 исправлений сделал еще одно изменение и сохранил. 9 самых старых ревизий «прибились в базе» и осталось только две последних. сохраняться при этом стало дальше намного быстрее
Ясно, спасибо.) Выходит, это решает проблему о которой столько шума? Насчет дублирования одного и того же поста при внесении изменений, которая появилась в бета-версиях.
@ AlexNote: да решает. особенно установка в «0» :-) Вопрос в том почему это сразу не разрешили делать и пришлось рыться в Кодексе чтобы понять как от этого избавиться или настроить
Пока не поставила 2.6 не поняла, о каких ревизиях тут речь :)
Т.е. получается, что через некоторое время база данных будет забита этими ревизиями, которые будут тупо занимать в ней место?
@ sonika: так оно и есть. для этого и нужна команда их чистить. вручную в базе некрасиво все же делать. лучше бы это делать прямо из админки.
А я такой плагинчик сделал. Он тока альфа еще, но вроде пашет нормально :)
Автоматическое Управление Версиями (Ревизиями) В WordPress 2.6
@ Roland Chanishvily: скачать не дает. перекидывает наhttp://chanishvili.org:88/files/rc_revmngr.zip . и еще стили и картинки на сайте не грузятся…
У меня там вообще половина записи потерялась 0_o
Починил, проверил — качается и лисой и осликом.
А можно ли совсем отключить эти ревизии?
@ Alex: если вы точно прочитали полностью ВНИМАТЕЛЬНО статью, то не задавали бы такой вопрос :-)
А так отключится автосохранение?
define('AUTOSAVE_INTERVAL', 0);
Что произойдет если прописать define(‘AUTOSAVE_INTERVAL’, 0);?
Максим, а какую цель ты преследуешь? Если просто ради любопытства, то давно бы сам попробовал…
Не совсем понял: лучше вообще выставить «0» в config и отключить ревизии, и не забивать базу или оставить парочку ревизий. Ревизии — только для удобства? т.е. типа написал в посте что-то не то, вернулся на ранее сохраненную?
да
Ясно. Спасибо.
Прочитал, по моему у Тараса в блоге, что каждая такая ревизия создает под себя в базе таблицу — это сколько же там «хлама» со временем накопится :(
Скачал плагин, установил и отключил вообще ревизии, что бы БД не захламлять :)
@ Олег: и не таблицу, а запись
Вопрос: выставил в config «0» но, в админке при создании записи указываются, что производятся ревизии. Не обращать внимания на эти сообщения? или это означает, что ревизии всетаки происходят? Спасибо.
@Олег: а параметр раскомментировали ?
Эх, нехорошо так удалять… Получаютсявисячие таксономии .
Правильно будет так:
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`;
Vladimir, добавил ссылку в пост
Использовал третий способ, все прошло нормально. Спасибо
Спасибо большое, третий способоб все работает, ревизии чистит.
Но вот раскоменнтированая строчка
define(‘WP_POST_REVISIONS’, 0);
как то не очень помогает, все равно создаются.
Подскажите как удалить старые записи из базы правильно ?
таблица wp_posts — 156Mb , нужно почистить , а то хостер уже жалуется… а стандартных способов для удаления не нашёл. Из админки не реально … даже 1-у запись с трудом удаляет … Хотеолось бы по дате удалять…
2008-04-10 или год месяц и главное только посты, а то тап и атачи и страницы.
Спасибо.
Поставил плагин, который вырезает ревизии вообще. Удалил созданные ранее. Спасибо.
Способ №1 (DELETE FROM wp_posts WHERE post_type = ‘revision’;), точно так же, как и простое удаление «Revision» из базы, на WP2.7 в моём случае, приводили к перекосу блога и появлению ошибки с указанием строки 1044 в файле wp_widget.php.
Способ №3 прошёл на ура.
Нужно только добавить, что удаление (DELETE) и оптимизацию (OPTIMIZE) нужно делать в два отдельных запроса к базе.
Локактусу мои благодарности! Просидел полдня, пока не наткнулся на эту статью.
Приношу прощения!
Способ №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
Может что-то посоветуете?
может кто подскажет sql запрос для удаления лишнего индекса из таблицы wp_posts, при проверке этой таблицы выдаёт такое
Проблемы с индексами таблицы <code>wp_posts</code>
Индексы wp_203_posts_guid_idx и wp_posts_guid_idx равнозначны и один из них может быть удалён.
только что этот пост!! помог мне почистить версию 2.9.2 спасибо!!!! хотя изначально читал другие кейсы..этот оказался наиболее полный с примерами.супер!