Ревизии WordPress: лимит вместо отключения
Ревизии WordPress: лимит вместо отключения
Хостинговые инструкции часто советуют полностью отключить ревизии WordPress — мол, они распухают и тормозят. Совет рабочий ровно наполовину: на сайте из моей серии замеров у одного сайта было 2 907 ревизий, у другого — 1, у третьего — 244. И только у одного из них это реально было проблемой. Полное отключение ревизий — слишком грубый инструмент: вы теряете историю правок, а это для автора текстов страховка от потери кусков текста. Правильный инструмент — лимит.
Что настраивается
Две константы в wp-config.php (до строки $table_prefix):
define( 'WP_POST_REVISIONS', 5 ); // хранить последние 5 ревизий на запись
define( 'AUTOSAVE_INTERVAL', 1200 ); // автосохранение раз в 20 минут (секунды)
Как работает:
- WP_POST_REVISIONS = 5 — при каждом сохранении WordPress удаляет самые старые ревизии, оставляя последние 5. История правок сохраняется, но не накапливается бесконечно.
- AUTOSAVE_INTERVAL = 1200 — автосохранение в редакторе раз в 20 минут вместо 60 секунд по умолчанию. Автосохранение хранится отдельно (одно на автора на запись, перезаписывается), так что на размер базы его частота почти не влияет — константа лишь снижает мелкий фоновый шум.
Чего делать не стоит: WP_POST_REVISIONS, false
Полное отключение (define( 'WP_POST_REVISIONS', false ); — тоже встречается в инструкциях) означает:
- ни одной точки открата: случайно заменили абзац — прежний текст восстановить неоткуда;
- редактура «вслепую»: сравнить версии до и после правки станет нечем;
- экономия копеечная: одна ревизия — единицы килобайт, а не мегабайты.
Разумный лимит — 3–5 ревизий. Пять хватит откатиться на день-два назад по любому тексту.
Важный нюанс: константа не удаляет старое
WP_POST_REVISIONS работает только при новых сохранениях: лишние ревизии удаляются по мере правок записей. Уже накопленные 2 907 ревизий сами не исчезнут — их чистят один раз вручную (wp-cli или WP-Optimize) и дальше лимит удерживает их в узде. Разбор чистки с замерами — в статье Чистка базы данных WordPress.
wp post delete $(wp post list --post_type=revision --format=ids --path=/путь/к/сайту) --force --path=/путь/к/сайту
--path обязателен в обеих командах: подстановка выполняется в текущем каталоге, и если вы запустите строку из каталога другого сайта, wp-cli соберёт ID чужих ревизий, а удалит их уже на целевом сайте — вместе со случайно совпавшими опубликованными записями.
Предостережение про AUTOSAVE_INTERVAL
Ставить 1200 секунд стоит с открытыми глазами: если браузер упадёт через 19 минут после последнего ручного сохранения — автосохранение ещё не успело сработать, и эти 19 минут текста потеряются. Дефолтные 60 секунд безопаснее; частые автосохранения базе не вредят (автосохранение перезаписывает свою же запись). Повышайте интервал только если редактор тормозит именно на автосохранениях.
Где константа не работает
- wp-config.php мультисайта — константы задаются до
switch_to_blog(), лимит общий для всей сети. - Уже созданные ревизии — см. выше.
- Импорт контента (WordPress importer) может создать ревизии поверх лимита — после импорта проверьте счётчик и подчистите.
Замечание о разных сайтах
Константа ставится в wp-config каждого сайта отдельно. Если сайтов несколько на одном VPS — не забудьте про все конфиги и про то, что wp config set на старых мигрированных конфигах может падать из-за отсутствия стандартных якорей (в этом случае вставляйте строку вручную перед $table_prefix).
