Управление ревизиями и автосохранением в 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, ревизии
Распечатать
Записи по теме
35 комментариев
Трэкбеки и пингбеки
Комментарии не по теме удаляются! Читайте реадми дистрибутива, комментарии и FAQ! Прежде чем задавать глупые вопросы, прочитайте это. Научитесь ценить чужое время!



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)
@Олег: а параметр раскомментировали ?
Эх, нехорошо так удалять… Получаются .
Правильно будет так:
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 равнозначны и один из них может быть удалён.