Редакции (или ревизии) в 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.
2-й вариант
Интервал сохранения
Чтобы задать собственный интервал сохранения редакций, добавляем эту строчку в wp-config.php:
define('AUTOSAVE_INTERVAL', 300 ); // интервал в секундах
Отключение
Чтобы полностью отключить редакции, размещаем этот код в wp-config.php:
define('WP_POST_REVISIONS', false ); // запретить ревизии постов
или этот:
define('WP_POST_REVISIONS', 0 );
Ограничение количества
Если полностью избавляться от редакций нежелательно, можно ограничить их количество:
define('WP_POST_REVISIONS', 10); // максимальное число создаваемых редакций
Удаление всех редакций
Можно выполнить запрос через phpMyAdmin, но есть и более действенный способ, не зависящий от префикса базы — просто вставляем этот код в functions.php текущей темы:
global $wpdb; $wpdb->query( " DELETE a,b,c FROM $wpdb->posts a LEFT JOIN $wpdb->term_relationships b ON (a.ID = b.object_id) LEFT JOIN $wpdb->postmeta c ON (a.ID = c.post_id) WHERE a.post_type = 'revision' " ); // как только редакции исчезнут, код нужно удалить
Этот запрос также удаляет все данные редакций из wp_term_relationships и из wp_postmeta (префикс может быть и не wp_).
Дополнительная информация:
Плагин Better Delete Revision
Плагин Revision Control
Как отключить ревизии в WordPress (Webcareer.ru)
Комментарии (0)