WordPress по умолчанию сохраняет каждое изменение записи или страницы в виде ревизий. Это удобно для отката к предыдущим версиям, но со временем количество ревизий может сильно увеличиться и негативно влиять на производительность базы данных. В этой статье разберем, как удалить старые версии постов программно, чтобы оптимизировать работу сайта и уменьшить размер базы данных.
Что такое ревизии в WordPress и зачем их удалять
Ревизии — это автоматические сохранения изменений записи, которые WordPress создает при каждом обновлении поста. Они позволяют восстановить предыдущие варианты текста, если что-то пошло не так. Однако, при большом количестве контента количество ревизий может достигать сотен тысяч, что замедляет запросы к базе и увеличивает размер резервных копий.
Удаление старых ревизий помогает снизить нагрузку на базу данных, особенно если вы не используете откат к предыдущим версиям. Но делать это нужно аккуратно, чтобы не потерять важные данные.
Как посмотреть количество ревизий в базе данных
Чтобы оценить, сколько ревизий хранится, можно выполнить SQL-запрос через phpMyAdmin или любой другой инструмент для работы с базой данных:
SELECT post_type, COUNT(*) AS revisions_count
FROM wp_posts
WHERE post_type = 'revision'
GROUP BY post_type;
Если в результате вы видите большое число, стоит задуматься об очистке.
Удаление ревизий с помощью SQL-запроса
Самый простой и быстрый способ — выполнить запрос, который удалит все ревизии:
DELETE FROM wp_posts WHERE post_type = 'revision';
Но такой подход не позволяет сохранить последние версии. Поэтому чаще используют более гибкие методы через код.
Удаление старых ревизий через PHP-код с ограничением количества
Ниже пример функции wpscan_delete_old_revisions(), которая оставляет в базе не более указанного количества ревизий для каждого поста и удаляет остальные.
function wpscan_delete_old_revisions($max_revisions = 3) {
global $wpdb;
// Получаем ID постов с ревизиями
$post_ids = $wpdb->get_col("SELECT DISTINCT post_parent FROM {$wpdb->posts} WHERE post_type = 'revision'");
foreach ($post_ids as $post_id) {
// Получаем ревизии для поста, кроме последних $max_revisions
$revisions = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_parent = %d ORDER BY post_date DESC LIMIT 1000 OFFSET %d",
$post_id, $max_revisions
));
if (!empty($revisions)) {
$ids_to_delete = implode(',', array_map('intval', $revisions));
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE ID IN ($ids_to_delete)");
}
}
}
// Запускаем функцию
wpscan_delete_old_revisions(3);
Такой подход удалит все ревизии, кроме трех последних для каждого поста, что позволит сохранить возможность отката и при этом очистить базу от лишних данных.
Автоматизация удаления ревизий через WP-Cron
Чтобы ревизии удалялись регулярно, можно добавить задачу в планировщик WordPress. Например, добавим функцию в файл functions.php вашей темы или в собственный плагин:
function wpscan_schedule_revision_cleanup() {
if (!wp_next_scheduled('wpscan_revision_cleanup_event')) {
wp_schedule_event(time(), 'daily', 'wpscan_revision_cleanup_event');
}
}
add_action('wp', 'wpscan_schedule_revision_cleanup');
add_action('wpscan_revision_cleanup_event', function() {
wpscan_delete_old_revisions(3);
});
Так ревизии будут чиститься каждый день, что поможет поддерживать базу данных в оптимальном состоянии.
Использование плагинов для управления ревизиями
Если не хотите писать код, можно использовать плагины. Например:
- WP-Sweep — удобный инструмент для очистки ревизий, спама, удаленных комментариев и прочего мусора.
- Clearfy Pro — расширенный функционал оптимизации, в том числе управление ревизиями и настройками автосохранения.
Оба плагина доступны для загрузки на wpshop.ru с удобной поддержкой.
Ограничение количества ревизий для новых постов
Чтобы ревизии не накапливались в будущем, можно ограничить их количество через файл wp-config.php, добавив строку:
define('WP_POST_REVISIONS', 3);
Это позволит сохранять не более 3 ревизий для каждого поста.
Также можно полностью отключить ревизии, указав значение false, но это не рекомендуется из-за потери возможности восстановления.
Выводы и рекомендации
Удаление старых ревизий — простой и эффективный способ оптимизации базы данных WordPress, особенно для сайтов с большим количеством контента. Используйте приведенный код или плагины для регулярной очистки, а также настройте ограничение ревизий для новых записей.
Если хотите более продвинутые возможности оптимизации и настройки, обратите внимание на плагин Clearfy Pro, который существенно упростит управление производительностью вашего сайта.