Отключаем ревизии Wordpress

Отключаем ревизии и автосохранение в WordPress

В WordPress есть такое понятие как ревизии. Это копии записи, которые хранятся на всякий случай. На какой? Ну, например, если во время написания записи, у вас отключили электричество или поломался инет вместе с компьютером. Да мало ли что может случиться в процессе написания вашего драгоценного поста…
Поэтому многие (возможно) воспринимают ревизии как нечто полезное.

А вот мне не нравится, когда ревизии сохраняются. Попробую объяснить почему именно. Ну и расскажу как их убить навсегда :)

Во-первых, каждая ревизия хранится в таблице с постами со статусом revision. Что это значит? Всего лишь то, что если у вас 100 постов, каждый из которых вы пишите 5 минут — то у вас по умолчанию около 5 ревизий (они сохраняются каждые 60 секунд). Это значит в БД вместо 100 записей — 500.
Да, цифры могут отличаться, но это же грубый подсчет :)
Получается база данных разрастается, и это не может не сказываться на времени выполнения запросов. И, что более важно, на ее размере. Ну, и разумеется, это затрудняет ручное редактирование БД, которым я иногда пользуюсь :)

Во-вторых, иногда ID статьи может служить для чего-то большего, чем для внутреннего хранения записей. Его, к примеру, можно вставлять в URL записи. С каждой новой ревизией ID записи увеличивается на 1. И может оказаться так, что при наличии тех самых 100 статей, ID следующей будет 501 вместо 101. Конечно, все это выглядит некрасиво лишь для тех, кто знает SQL и может работать с БД напрямую.

Существуют много плагинов, чтобы отключить ревизии. Как минимум штук пять. Проблема в том, что они их не отключают полностью :) Собственно, поэтому я все и пишу.

Так как же отключить ревизии?

На самом деле все очень просто, даже плагины ставить не надо. Нужно сделать всего лишь две вещи:

  1. В wp-config.php добавить строчку (или раскомментировать) define('WP_POST_REVISIONS', 0);
  2. Также нам нужно будет открыть файл functions.php (разумеется для текущей темы оформления) и добавить вниз код:
function disable_autosave() {
wp_deregister_script('autosave');
}
add_action('wp_print_scripts', 'disable_autosave');
1
2
3
4
function disable_autosave() {
wp_deregister_script('autosave');
}
add_action('wp_print_scripts', 'disable_autosave');

Как удалить ревизии?

Если ваш сайт работает уже довольно долго — то вы можете очистить БД от ненужных ревизий вручную.
С этой задачей большинство плагинов для работы с ревизиями справляется. Ставьте любой :)
Ну а для тех, кто уже успел зайти в какой-нибудь phpmyadmin проще выполнить SQL команду:

DELETE FROM `wp_posts` WHERE post_type='revision'

И все сохраненные ревизии исчезнут.

P.S. Все это проверено и работает на версии WordPress 3.0.1

Добавить комментарий