Если вы активно ведёте блог или сайт на WordPress, то знаете, что каждая запись сохраняет не только текущую версию, но и множество ревизий — предыдущих версий записи. Это полезно для восстановления, но со временем ревизии накапливаются, занимая место в базе данных и замедляя работу сайта. В этой статье разберём, как эффективно удалить старые ревизии постов из базы данных WordPress, сохранив при этом нужные версии и не нарушив работу сайта.
Что такое ревизии в WordPress и почему их стоит удалять
Ревизии — это автоматические или ручные сохранения предыдущих версий записи. Они позволяют откатиться к старым вариантам, если вы случайно удалили важный контент или хотите сравнить изменения. Однако, если не ограничивать их количество, база данных может быстро разрастись, особенно на крупных сайтах.
Избыточное количество ревизий:
- Увеличивает размер таблиц wp_posts и wp_postmeta.
- Замедляет выполнение запросов к базе данных.
- Усложняет резервное копирование и восстановление.
Поэтому периодическая очистка ревизий — хорошая практика для поддержания скорости и стабильности сайта.
Ограничение количества ревизий с помощью wp-config.php
Чтобы в будущем не накапливать слишком много ревизий, можно задать лимит на их количество. Для этого добавьте в wp-config.php следующую строку:
define('WPFRONT_LIMIT_POST_REVISIONS', 5);
Замените WPFRONT_LIMIT_POST_REVISIONS на стандартный константный ключ WordPress WP_POST_REVISIONS, если хотите применить универсальное ограничение:
define('WP_POST_REVISIONS', 5);
Это ограничит количество ревизий для каждой записи максимум до 5. Старые ревизии будут удаляться автоматически при сохранении новых.
Удаление старых ревизий через SQL-запрос
Если база уже разрослась, можно удалить все ревизии через прямой запрос к базе данных. Для этого выполните следующий SQL-запрос через phpMyAdmin или другой клиент базы данных:
DELETE FROM wp_posts WHERE post_type = 'revision';
Однако этот способ удалит все ревизии без разбора. Если вы хотите сохранить последние N ревизий для каждой записи, потребуется более сложный запрос или скрипт.
Удаление всех ревизий с помощью PHP-скрипта
Ниже пример функции для удаления всех ревизий через WP_Query и wp_delete_post(), который безопаснее и запускает все хуки:
function wpfront_delete_all_revisions() {
$revisions = new WP_Query(array(
'post_type' => 'revision',
'posts_per_page' => -1,
'fields' => 'ids'
));
foreach ($revisions->posts as $revision_id) {
wp_delete_post($revision_id, true);
}
}
Вы можете вызвать wpfront_delete_all_revisions() один раз, например, через плагин Code Snippets или в functions.php, а после удаления закомментировать вызов.
Удаление старых ревизий, оставляя последние N версий
Если хотите сохранить последние, например, 3 ревизии для каждой записи, нужно более точное решение. Вот пример функции, которая удалит старые ревизии, оставив только последние 3 для каждого поста:
function wpfront_trim_post_revisions($keep = 3) {
global $wpdb;
$post_ids = $wpdb->get_col("SELECT DISTINCT post_parent FROM {$wpdb->posts} WHERE post_type = 'revision'");
foreach ($post_ids as $post_id) {
$revisions = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_parent = %d ORDER BY post_date DESC",
$post_id
));
if (count($revisions) > $keep) {
$to_delete = array_slice($revisions, $keep);
foreach ($to_delete as $revision_id) {
wp_delete_post($revision_id, true);
}
}
}
}
Вызывайте wpfront_trim_post_revisions(3), чтобы оставить по 3 ревизии на запись.
Плагины для управления ревизиями
Если не хотите писать код, можно использовать плагины. Вот несколько полезных:
- Clearfy Pro — комплексный плагин для оптимизации WordPress, включая удаление ревизий и ограничение их количества.
- WP-Optimize — бесплатный плагин для очистки базы данных, в том числе удаления ревизий одним кликом.
- Revision Control — позволяет ограничивать количество ревизий для разных типов постов.
Рекомендации по безопасности и бэкапу
Перед удалением ревизий обязательно сделайте резервную копию базы данных. Любые манипуляции с базой могут привести к потере данных, если что-то пойдёт не так. Используйте проверенные методы и тестируйте на тестовом сайте перед применением на продакшене.
Также рекомендуем использовать WPFront Custom Post Types или Expert Review для организации контента, если ваш сайт содержит много информации, требующей версионности и ревизий.