Всем привет, дорогие мои читатели In4wp.ru. Не так давно мы разбирали тему как ускорить блог на wordpress. Но вот буквально на днях мне пришлось добавить еще один способ к этой статье. Крайне эффективный, когда вы ведете своё блог длительное время при условии, что этой фишки вы не знали.
Эти так называемые ревизии или по-другому редакции существуют еще со старых версий cms wordpress.
Зачем нужны ревизии постов?
Ревизии постов и страниц нужны только в теории. Дело в том что они сохраняют резервную копию вашей статьи в базе данных. Причем сохранение происходит при каждом вашем изменении.
Получается так, что в процессе написания статьи, когда вы нажимаете кнопку «Сохранить» — у вас создается копия вашей статьи с вашими изменениями. И в любой момент вы можете посмотреть список этих копий и выбрать наиболее подходящую и восстановить.
За всю мою практику мне приходилось восстанавливать копию из подобных резервов лишь однажды. Но тем не менее.
С виду, возможность кажется весьма полезной. Однако надо понимать, что каждое подобное сохранение — это лишняя нагрузка на базу данных, т.к. все копии хранятся именно в ней.
Вот вам пример из жизни. У меня в среднем на блоге было 4-5 ревизий каждой статьи. Представьте когда у вас будут сотни статей написано, а возможно, тысячи статей — удалив ревизии (редакциИ) постов — вы тем самым ускорите свой блог в 5 раз.
А что если у вас не 5 редакций, а 10 к каждому посту? Кстати, сколько у вас, если не секрет? Напишите об этом в комментариях пжлст.
Кстати, самое интересно, что когда вы даже не нажимаете на кнопку «Сохранить» — у вас ревизии постов создаются автоматически. Это называется автосохранение.
Так вот, рекомендую прочитать эту стать до конца, чтобы понять как эти ревизии постов если и не удалять, то хотя бы ограничивать в количестве.
Как можно ограничить количество редакций постов?
Мы уже знаем, что все редакции хранятся в базе данных. Чтобы их количество изменить, нам пригодится стандартный «фильтр», который называется так wp_revisions_to_keep , или с помощью директивы WP_POST_REVISIONS в файле wp-config.php.
Кстати, у меня, почему-то директива в файле wp-config — не сработала. Напишите, у кого она работает в новых версиях WordPress ?
Итак, допустим, мы хотим оставить возможность сохранения ревизий, но оставить, скажем, только 3шт. Для этого нам нужно написать следующее:
function my_revisions_to_keep( $revisions ) {
return 3;
}
add_filter( 'wp_revisions_to_keep', 'my_revisions_to_keep' );
С помощью wp_revisions_to_keep можно еще ограничивать количество копий в разных типах постов. Точнее в одном типе — одно количество ревизий, в другом — другое.
Ну вот, например, допустим, вам нужно 5 ревизий для страниц и 3 ревизии для статей (постов) и остальных типов записей.
function my_revisions_to_keep( $revisions, $post ) {
if ( 'page' == $post->post_type )
return 5;
else
return 3;
}
add_filter( 'wp_revisions_to_keep', 'my_revisions_to_keep', 5, 2 );
Можете еще попробовать использовать WP_POST_REVISIONS в файле wp-config.php, но этот способ не дает возможности разделить на типы записей.
define( 'WP_POST_REVISIONS', 3 );
Как отключить и/или удалить редакции в wordpress
Таким же макаром вы сможете отказаться от ревизий вообще. Нужно просто цифру 0 поставить в ограничениях.
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 );
[tip]Самое главное. Отключение ревизий — никак не повлияет на их существование (уже существующих). т.е. если у вас было к каждой статье по 3-5 ревизий и вы отключили ревизий — старые копии постов все равно останутся. Их нужно удалять руками через БД. [/tip]
Как же удалить все ревизии, редакции
Итак, мы отключили редакции. МЫ уже знаем что просто отключить редакции — мало. Надо их вырвать с корнем, удалить в ручную через MySQL.
Начнем, пожалуй. Но, перед тем как что-то удалять — сделайте Бекап. Лучше сделать бекап всего сайта.
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%';
Этот запрос в MySQL удалит вообще все ревизии что есть в вашей базе. Кроме автосохранений.
[important]Автосохранение — тоже считается ревизией, но они не удаляются и не отключаются!! Поэтому чтобы их было как можно меньше — пишите тексты заранее в ворде, а потом просто вставляйте в админку![/important]
Небольшое напоминание о том как работать с MySQL
Если вдруг забыли.
Я работаю с хостингом adminvps , я даже рассказывал почему именно с ним — в этой статье. Так вот, я буду показывать всё на нем.
Заходим в phpMyAdmin в вашей контрольной панели управления хостингом.
Не беспокойтесь если увидите нулевые значения, значит вы просто не использовали левых типов записей или таксономий.
А вот что я получил, используя последний запрос.
Я уверен, что тоже самое есть и у вас! Проверьте и отпишите мне потом об этом.
Плагин для работы с редакциями постов
Могу посоветовать еще плагин Revision Control, он позволяет сделать тоже самое что я описал, только в более комфортном для вас режиме. Прямо в админке.
Если у вас все еще остались вопросы — задавайте, я буду рад вам помочь. На этом пока всё. Спасибо за внимание.
[bye]
Эти самые ревизии ужасно забивают базу данных. У меня на блоге не так много записей а база данных уже почти 9 мегабайт. Ужас просто! Нужно срочно принимать меры и отключать ревизии
Это правильно, только вот делать это надо было сразу же после создания блога. В общем, хороший урок на будущее. У меня по 3 -4 ревизии на одну статью получалось, причем как я понимаю, это еще минимум. Так что сейчас поставил плагин, по новым постам реально работает, а вот до старых постов руки просто не доходят, вручную все чистить…
Кстати, если у вас в базе данных нестандартный префик (т.е. не wp_), будет выдавать ошибку.Чтобы все было хорошо, меняйте везде WP_ на свой, который прописан в настройках или придуман вами
Денис, я попробую через плагин, посмотрю что получится, а в плагине есть какие настройки??
С плагином знаком только по наслышке. Буду рад если вы более детально распишите как он работает. Сам я руками через базу всё убирал. Если вам нужно помощь в этом деле — обращайтесь.
Денис, плагин установил настройки простые выбрал сохранять количество копий 2 . Завтра буду писать статью посмотрю сколько сохраненных копий будет,
Попробовал поработать ручками, почему-то не получилось, выдает ошибки при запросе к базе данных. Поэтому поставил плагин, действительно очень удобный и простой, вроде бы все получилось, посмотрим что будет дальше…
Я для чистки использую плагин WP Clean Up, когда надо включаю, потом выключаю.
А можно еще отключить HeartBeat API, отключив функцию автосохранения.
Так я не пойму, ревизии это хорошо или плохо?
ну конечно удалять
их нужно удалять ради экономии дискового пространства на сервере или же ограничить их количество до минимума.
читайте коммент ниже от Александр
Это плохо, зачем нужны разные варианты статьи, если уже есть опубликованная…Желательно удалять, чтобы было больше места на сервере…
Столько статей видел по этому поводу с одними и теми же выводами. А не лучше на cron повесить периодическую чистку базы и не отключать то, что раз в год может выручить? Сам хочу пойти по этому пути, но пока и без того сильно много задач и мало времени.
Возможно, но крон это черезчур сложно, по крайней мере в плане объяснения. Мне так показалось. Многие не понимают что такое база данных и как ей пользоваться.