При активной работе с WordPress накапливаются ревизии постов — автоматические сохранения изменений, которые создают несколько версий одной записи. Это удобно для восстановления, но с течением времени количество ревизий может значительно увеличить размер базы данных, замедлить работу сайта и усложнить резервное копирование. В этой статье рассмотрим, как эффективно удалить версии постов (ревизии) в WordPress, оптимизировать базу данных и предотвратить избыточное их накопление в будущем.
Что такое версии постов (ревизии) в WordPress и почему их много?
Ревизии — это автоматические сохранения, которые WordPress создает при редактировании записи. Каждый раз, когда вы нажимаете кнопку «Сохранить» или «Обновить», система сохраняет текущую версию. Это позволяет вернуться к предыдущему варианту, если внесены ошибочные изменения.
Однако при активном редактировании количество ревизий может достигать сотен и даже тысяч, особенно на сайтах с большим количеством записей. Избыточные ревизии занимают место в таблице wp_posts и замедляют запросы к базе данных.
Из-за этого важно периодически удалять ненужные ревизии и ограничивать их количество.
Как удалить все версии постов через базу данных
Самый прямой способ — удалить ревизии через SQL-запрос в базе данных. Для этого можно использовать phpMyAdmin, Adminer или любой другой инструмент работы с базой данных.
Для удаления всех ревизий выполните следующий запрос:
DELETE FROM wp_posts WHERE post_type = 'revision';Этот запрос удалит все записи с типом revision. После удаления рекомендуется оптимизировать таблицу:
OPTIMIZE TABLE wp_posts;Оптимизация освободит место в базе и улучшит производительность. Помните, что префикс таблиц может отличаться, если вы его меняли, замените wp_ на свой.
Как выполнить запрос безопасно
Перед выполнением запросов всегда делайте резервную копию базы данных. Это позволит восстановить данные в случае ошибки.
Если у вас нет доступа к базе, можно использовать плагин для удаления ревизий, о которых поговорим ниже.
Плагины для удаления ревизий и оптимизации базы данных
Если вы не хотите работать напрямую с базой, можно использовать плагины. Рассмотрим популярные решения:
- WP-Optimize — не только удаляет ревизии, но и оптимизирует базу данных, удаляет спам и мусор. Удобный интерфейс и расписание автоматической очистки.
- Advanced Database Cleaner — мощный инструмент для очистки базы от ревизий, черновиков, мусора, а также оптимизации таблиц.
- Better Delete Revision — специализированный плагин для удаления ревизий без лишних функций.
Большинство плагинов позволяют выбрать, какие типы данных удалять, и запускать очистку вручную или по расписанию.
Пример: как удалить ревизии с помощью WP-Optimize
1. Установите и активируйте плагин через админ-панель WordPress.
2. Перейдите в раздел WP-Optimize > Database.
3. Отметьте пункт «Удалить все ревизии записей».
4. Нажмите «Запустить оптимизацию».
Плагин удалит все ревизии и оптимизирует таблицы, повысив скорость работы сайта.
Как ограничить количество сохраняемых ревизий в WordPress
Чтобы предотвратить чрезмерное накопление ревизий, можно ограничить их количество. Для этого добавьте в файл wp-config.php следующую строку:
define('WPABOUT_LIMIT_REVISIONS', 3);Но стандарт WordPress не использует эту константу, поэтому для совместимости лучше использовать стандартную константу WP_POST_REVISIONS:
define('WP_POST_REVISIONS', 3);Это ограничит количество ревизий каждой записи до 3. Старые версии будут автоматически удаляться при сохранении новых.
Пример пользовательской функции для ограничения ревизий (wpabout_limit_revisions)
Если нужно более гибкое управление, можно добавить фильтр в файл functions.php вашей темы или в собственный плагин:
function wpabout_limit_revisions($num, $post) {
if ($post->post_type === 'post') {
return 3; // ограничиваем для записей
}
return $num; // для других типов — без ограничений
}
add_filter('wp_revisions_to_keep', 'wpabout_limit_revisions', 10, 2);Этот код ограничит количество ревизий для постов до 3, а для других типов оставит стандартное поведение.
Как программно удалить ревизии с помощью WPAbout функций
Если необходимо реализовать удаление ревизий автоматически, например, по крону, можно использовать следующий пример функции:
function wpabout_delete_all_revisions() {
global $wpdb;
$deleted = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
if ($deleted !== false) {
$wpdb->query("OPTIMIZE TABLE {$wpdb->posts}");
}
return $deleted;
}Эту функцию можно вызывать из плагина или файла темы, либо запланировать выполнение через WP-Cron.
Пример добавления задачи WP-Cron для очистки ревизий
function wpabout_schedule_revision_cleanup() {
if (!wp_next_scheduled('wpabout_revision_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpabout_revision_cleanup_hook');
}
}
add_action('wp', 'wpabout_schedule_revision_cleanup');
add_action('wpabout_revision_cleanup_hook', 'wpabout_delete_all_revisions');Код выше создает ежедневное событие, которое будет запускать функцию удаления ревизий. Это удобный способ поддерживать базу данных в чистоте без ручного вмешательства.
Как проверить количество ревизий и оценить выгоду от удаления
Чтобы понять, сколько ревизий накопилось, можно выполнить SQL-запрос:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';Если число большое (сотни или тысячи), имеет смысл очистить базу.
Также можно проверить размер таблицы wp_posts до и после оптимизации через инструменты хостинга или phpMyAdmin.
Выводы и рекомендации по работе с ревизиями
Ревизии полезны для восстановления контента, но их избыточное количество негативно влияет на производительность. Регулярная очистка и ограничение количества ревизий — обязательные меры для оптимизации WordPress сайтов.
Используйте автоматизацию с помощью плагинов или собственного кода, чтобы база оставалась легкой и быстрой.
Обязательно делайте резервные копии перед удалением данных и тестируйте изменения на тестовом сайте.