Редакции (или ревизии) в WordPress существуют уже давно. Они позволяют сохранять резервную копию записи или страницы при каждом изменении, а затем просматривать все версии с возможностью восстановить любую из них.
Несмотря на этот полезный функционал, каждая редакция это фактически копия самой записи, которая так же хранится в базе данных. На крупных сайтах с большим количеством контента, редакции могут существенно увеличить размер базы данных MySQL.
В этой краткой статье мы рассмотрим несколько методов для ограничения максимального количества редакций на каждую запись, а так же для удаления всех редакций из базы данных WordPress.
Ограничение количества редакций
По умолчанию WordPress хранит все редакции для записей и страниц. Это легко изменить с помощью фильтра wp_revisions_to_keep
в вашем плагине, или с помощью константы WP_POST_REVISIONS
в файле конфигурации wp-config.php
. Например, если нам нужно сохранять только 5 последних версий записей и страниц, наш плагин будет выглядеть так:
/** * Plugin Name: My Revisions Config */ function my_revisions_to_keep( $revisions ) { return 5; } add_filter( 'wp_revisions_to_keep', 'my_revisions_to_keep' );
С помощью фильтра можно так же ограничивать редакции в зависимости от типа записи. Например, если нам необходимо 10 редакций для страниц и всего 5 редакций для записей (и других типов), то наш плагин будет выглядеть следующим образом:
function my_revisions_to_keep( $revisions, $post ) { if ( 'page' == $post->post_type ) return 10; else return 5; } add_filter( 'wp_revisions_to_keep', 'my_revisions_to_keep', 10, 2 );
Вы так же можете установить ограничение с помощью директивы WP_POST_REVISIONS
в файле конфигурации WordPress wp-config.php
, но разделение на типы записей с помощью этого метода уже сделать будет невозможно:
define( 'WP_POST_REVISIONS', 5 );
Как отключить редакции
С помощью этих же методов, вы можете и вовсе отказаться от редакций в WordPress. Для этого необходимо установить нулевое ограничение:
function my_revisions_to_keep( $revisions ) { return 0; } add_filter( 'wp_revisions_to_keep', 'my_revisions_to_keep' );
Или с помощью файла wp-config.php
:
define( 'WP_POST_REVISIONS', 0 );
Обратите внимание, что подобное отключенные редакций не повлияет на уже существующие редакции. Все ревизии которые существовали до момента отключения останутся доступными, а новые редакции при сохранении создаваться не будут. Стоит так же отметить, что автосохранения в WordPress тоже являются редакциями и описанные выше методы их не отключают.
Как удалить все редакции
После того, как вы отключили редакции в WordPress, вы наверняка захотите удалить все созданные ранее редакции из базы данных WordPress. Сделать это легко с помощью пары запросов в MySQL через командную строку или интерфейс phpMyAdmin.
Перед тем, как удалить все редакции, необходимо удалить их мета-данные и таксономию, если они имеются. Сделать это можно с помощью запроса:
DELETE FROM wp_postmeta WHERE post_id IN (SELECT ID FROM wp_posts WHERE post_type = 'revision' AND post_name LIKE '%revision%');
Похожий запрос для удалении таксономии:
DELETE FROM wp_term_relationships WHERE object_id IN (SELECT ID FROM wp_posts WHERE post_type = 'revision' AND post_name LIKE '%revision%');
И наконец, удалить сами ревизии:
DELETE FROM wp_posts WHERE post_type = 'revision' AND post_name LIKE '%revision%';
Данный запрос удалит все редакции из базы данных WordPress, за исключением автосохранений. Перед исполнением любых подобных запросов, рекомендуем сделать резервную копию вашей базы данных MySQL.
Советуем так же рассмотреть плагин Revision Control, который позволяет просматривать и удалять редакции в WordPress, а так же предоставляет интерфейс для установления ограничения на количество редакций для записей и страниц.
Если у вас возникли проблемы или вопросы при управлении редакциями в WordPress — оставьте комментарий и мы с радостью вам ответим.