Редакции записей: настройка и удаление

screenshot
Рис.1 Панель визуального редактора

Редакции (или ревизии) в 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)

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