В процессе работы с WordPress каждая правка записи автоматически сохраняется как ревизия. Это удобно для восстановления предыдущих версий, но при большом количестве материалов и частых правках база данных может значительно разрастаться. В результате сайт начинает работать медленнее из-за нагрузки на базу данных и увеличения её размера. В этой статье мы подробно рассмотрим, как удалить старые ревизии записей WordPress без использования плагинов, оптимизировав базу данных и сохранив только нужные версии.
Что такое ревизии в WordPress и зачем их удалять
Ревизии — это автоматические или ручные сохранения редакций записей и страниц. WordPress сохраняет каждое изменение как отдельную ревизию, чтобы можно было откатиться к предыдущей версии. По умолчанию количество ревизий не ограничено, и со временем их становится очень много.
Большое количество ревизий влияет на производительность базы данных и увеличивает её размер. Это особенно заметно на сайтах с большим количеством контента или активным редактированием. Удаление старых ревизий помогает:
- Снизить нагрузку на базу данных;
- Ускорить выполнение запросов;
- Уменьшить общий размер базы данных;
- Поддерживать порядок и чистоту в данных.
Как удалить старые ревизии через SQL-запросы в базе данных
Самый простой и эффективный способ удалить старые ревизии — выполнить SQL-запрос напрямую через phpMyAdmin или другой инструмент управления базой данных.
Ревизии хранятся в таблице wp_posts с типом revision. Чтобы удалить все ревизии, выполните следующий запрос:
DELETE FROM wp_posts WHERE post_type = 'revision';
Однако такой запрос удалит все ревизии без разбора, включая последние, что может быть нежелательно. Если вы хотите оставить, например, последние 3 ревизии для каждой записи, задача усложняется.
Для выборочного удаления можно использовать более сложные запросы, но они зависят от структуры базы и версии MySQL. В большинстве случаев удобнее и безопаснее удалять все ревизии, а потом ограничить их количество для новых записей.
Ограничение количества ревизий для новых записей через functions.php
Чтобы не накапливать ревизии в будущем, можно ограничить их количество. Добавьте в файл functions.php вашей темы следующий код:
function wpdesk_limit_post_revisions() {
return 3; // Оставлять только 3 последние ревизии
}
add_filter('wp_revisions_to_keep', 'wpdesk_limit_post_revisions', 10, 2);
Это позволит WordPress автоматически удалять старые ревизии, сохраняя не более 3 для каждой записи. Так вы сохраните возможность восстановления, но база не будет переполнена.
Пример функции для удаления ревизий программно через WP-CLI или в плагине
Если вы хотите интегрировать удаление ревизий в свой плагин или использовать его через WP-CLI, можно написать функцию, которая удалит ревизии постов по частям, чтобы не перегружать сервер.
function wpdesk_delete_old_revisions($limit = 100) {
global $wpdb;
// Выбираем ID ревизий
$revisions = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' LIMIT %d", $limit);
if (!empty($revisions)) {
foreach ($revisions as $revision_id) {
wp_delete_post($revision_id, true); // Удаляем полностью
}
}
return count($revisions);
}
Вызовите функцию несколько раз, пока она возвращает ненулевое число, чтобы полностью очистить ревизии.
Использование плагина Clearfy Pro для управления ревизиями
Хотя мы рассматриваем удаление без плагинов, для удобства управления ревизиями и другими оптимизациями стоит обратить внимание на Clearfy Pro. Этот плагин позволяет легко ограничить количество ревизий, отключить их сохранение и выполнить очистку базы данных без сложных запросов.
Резюме и рекомендации
Удаление старых ревизий — обязательная мера для сайтов с большим количеством контента и частыми правками. Это помогает держать базу данных в порядке и повышает производительность. Для удаления ревизий можно использовать SQL-запросы напрямую, написать собственный код в functions.php или использовать специализированные плагины, например, Clearfy Pro.
Не забывайте регулярно создавать резервные копии базы данных перед выполнением операций удаления.