Управление ревизиями и автосохранением в 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



Записи по теме

35 комментариев

Страницы: « 1 [2] Show All

  1. 21 Lecactus 14 августа 2008 в 11:41 (GMT+6)

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

    да


  2. 22 Олег 14 августа 2008 в 12:57 (GMT+6)

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


  3. 23 Lecactus 14 августа 2008 в 17:14 (GMT+6)

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


  4. 24 Олег 15 сентября 2008 в 13:56 (GMT+6)

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


  5. 25 Lecactus 15 сентября 2008 в 14:05 (GMT+6)

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


  6. 26 Vladimir 26 ноября 2008 в 0:46 (GMT+6)

    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`;


  7. 27 Lecactus 26 ноября 2008 в 1:25 (GMT+6)

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


  8. 28 Михаил 25 января 2009 в 19:41 (GMT+6)

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


  9. 29 KveSteR 28 марта 2009 в 7:57 (GMT+6)

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


  10. 30 NuN 29 апреля 2009 в 1:14 (GMT+6)

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


  11. 31 BarSug 14 июня 2009 в 6:33 (GMT+6)

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


  12. 32 oldoctober.com 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) нужно делать в два отдельных запроса к базе.

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


  13. 33 oldoctober.com 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

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


  14. 34 Dmitriy 16 марта 2010 в 1:32 (GMT+6)

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

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


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

  1. Игры с Интернетом - Искариот - 30 серебренников за Интернет

Страницы: « 1 [2] Show All

Комментарии не по теме удаляются! Читайте реадми дистрибутива, комментарии и FAQ! Прежде чем задавать глупые вопросы, прочитайте это. Научитесь ценить чужое время!

 Имя (обязательно)  EMAIL (обязательно)  АДРЕС ЛИЧНОГО БЛОГА

Вы соглашаетесь с правилами


При добавлении HTML|CSS|JS|PHP кода в комментарий, оформляйте его через кнопку КОД

 

Получать комментарии по RSS Адрес трэкбека