Статьи

Как взять под контроль страницу и публиковать изменения в WordPress

Контроль страницы и публикации ревизий в WordPress

Эта статья является частью серии, созданной в сотрудничестве с SiteGround . Спасибо за поддержку партнеров, которые делают возможным использование SitePoint.

WordPress предоставляет систему ревизий, которая записывает полную копию каждой страницы и публикует ее после сохранения. Преимущество: вы можете в любое время вернуться к более ранней версии документа и провести сравнение. Или вы можете выяснить, кто виноват в разболтанности и грамматических ошибках.

По умолчанию количество изменений, сохраняемых на странице или в записи, не ограничено. (Обратите внимание, что для каждого редактора выполняется только одно автосохранение — последнее автоматическое сохранение перезаписывает предыдущее.) Каждая редакция требует отдельной строки в таблице posts WordPress и, возможно, нескольких записей в таблицах term_relationships и term_relationships . Это редко проблема для небольших сайтов, но это может повлиять на производительность и эффективность больших установок. В конечном итоге таблицы заполняются избыточными данными, которые никогда не будут использоваться.

Ограничение ревизий

Количество ревизий может быть установлено в файле wp-config.php WordPress. Если вам не известен этот файл, я рекомендую вам обратиться за дополнительной помощью к разработчику. Сделайте копию wp-config.php перед редактированием, потому что небольшая ошибка может сломать ваш сайт WordPress.

Чтобы полностью отключить ревизии, добавьте следующую строку в wp-config.php :

 define('WP_POST_REVISIONS', 0); 

Чтобы ограничить количество ревизий, измените число на положительное целое число, например, не более десяти ревизий на страницу / пост:

 define('WP_POST_REVISIONS', 10); 

Чтобы вернуться к неограниченным ревизиям, удалите строку или измените значение на -1 :

 define('WP_POST_REVISIONS', -1); 

Редакции плагинов

Если редактирование файла кажется слишком сложным, есть несколько плагинов для управления ревизиями . Например, WP Revisions Limit устанавливает предел ревизий таким же образом.

Программно ограничивающие редакции

Фильтр wp_revisions_to_keep позволяет плагинам или файлу functions.php вашей темы контролировать, сколько ревизий сохраняется для данного поста.

Функция фильтра передается два аргумента:

  • количество ревизий по умолчанию, чтобы сохранить
  • объект WP_Post текущего поста

и должен вернуть количество разрешенных ревизий.

В следующем примере устанавливается ограничение в пять ревизий для сообщений с типом «custom_post»:

 add_filter( 'wp_revisions_to_keep', 'control_revisions', 10, 2 ); function control_revisions($num, $post) { if('custom_post' == $post->post_type) $num = 5; return $num; } 

Вы также можете использовать WordPress REST API для просмотра , извлечения и удаления ревизий .

Как удалить старые ревизии

WP_POST_REVISIONS выше методы активируются немедленно, поэтому в идеале вы должны установить WP_POST_REVISIONS вскоре после установки WordPress. Однако этот параметр не удалит старые ревизии из базы данных MySQL. Можно очистить старые данные, но помните об опасности. Прежде чем предпринимать какие-либо действия, не забудьте …

СОЗДАЙТЕ СВОЮ БАЗУ ДАННЫХ!

Самый простой вариант — использовать плагин, такой как WP-Optimize, который очищает вашу базу данных WordPress, удаляя ревизии, а также другие оптимизации. Вы можете запустить его один раз или установить регулярное расписание.

Кроме того, вы можете жить опасно и запустить команду SQL для очистки ревизий. Сначала найдите префикс таблицы WordPress — он указан в wp-config.php , например

 $table_prefix = 'wp_'; 

wp_ является значением по умолчанию. Мы будем предполагать, что wp_ был указан для следующего кода, но при необходимости изменим ссылки. Чтобы удалить все ревизии для всех страниц и постов, запустите инструмент администрирования MySQL, такой как phpMyAdmin, и выполните следующую команду SQL:

 DELETE a,b,c FROM wp_posts a LEFT JOIN wp_term_relationships b ON ( a.ID = b.object_id ) LEFT JOIN wp_postmeta c ON ( a.ID = c.post_id ) LEFT JOIN wp_term_taxonomy d ON ( b.term_taxonomy_id = d.term_taxonomy_id ) WHERE a.post_type = 'revision' AND d.taxonomy != 'link_category'; 

Спасибо Майклу Амброзио за предоставление этого исправления, когда мой оригинальный код, хм, сломал некоторые вещи!

Все будет хорошо, у вас будет искристая чистая база данных, а WordPress будет заметно быстрее. Кроме того, WordPress не запустится, и вы потеряли замечательные посты на десятилетия. Но вы сделали резервную копию сначала, конечно …