В WordPress каждая правка записи или страницы сохраняется в виде ревизии. Это удобно для отката и контроля изменений, но с течением времени количество ревизий может значительно увеличиться, что приводит к разрастанию базы данных и замедлению работы сайта. В этой статье мы рассмотрим, как автоматически удалять старые ревизии записей в WordPress, чтобы поддерживать базу данных в оптимальном состоянии.
Почему важно удалять старые ревизии записей
Ревизии помогают восстановить предыдущие версии контента, но на крупных сайтах или блогах с частыми обновлениями количество ревизий может достигать тысяч. Это:
- Увеличивает размер таблиц базы данных, особенно
wp_postsиwp_postmeta. - Замедляет выполнение запросов на выборку записей.
- Может приводить к увеличению времени резервного копирования и восстановления базы.
Регулярное удаление старых ревизий помогает сократить нагрузку на сервер и ускорить работу сайта.
Как WordPress хранит ревизии и где их искать
Ревизии — это записи с типом revision в таблице wp_posts. Каждая ревизия связана с исходной записью через поле post_parent. В таблице wp_postmeta могут храниться метаданные для ревизий, которые тоже следует учитывать при очистке.
Для удаления ревизий необходимо удалять записи с post_type = 'revision' и соответствующие им метаданные.
Способы автоматического удаления старых ревизий
1. Использование WP-CLI для периодической очистки
WP-CLI — удобный инструмент командной строки для управления WordPress. С его помощью можно быстро удалить все ревизии:
wp post delete $(wp post list --post_type='revision' --format=ids) --forceЭтот код удалит все ревизии в базе. Для автоматизации можно добавить cron-задачу на сервер, которая будет запускать эту команду по расписанию, например, раз в неделю.
2. Автоматическое удаление через хук WordPress
Можно написать функцию, которая будет запускаться по крону WordPress и удалять старые ревизии, например, старше 30 дней.
function wpchecker_delete_old_revisions() {
global $wpdb;
$days = 30; // количество дней для хранения ревизий
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
// Получаем ID ревизий старше $days дней
$revisions = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_modified < %s",
$date_threshold
));
if (!empty($revisions)) {
foreach ($revisions as $revision_id) {
// Удаляем метаданные ревизии
$wpdb->query($wpdb->prepare("DELETE FROM {$wpdb->postmeta} WHERE post_id = %d", $revision_id));
// Удаляем саму ревизию
$wpdb->delete($wpdb->posts, ['ID' => $revision_id]);
}
}
}
// Регистрируем крон-задачу
if (!wp_next_scheduled('wpchecker_delete_old_revisions_hook')) {
wp_schedule_event(time(), 'daily', 'wpchecker_delete_old_revisions_hook');
}
add_action('wpchecker_delete_old_revisions_hook', 'wpchecker_delete_old_revisions');Этот пример создаёт ежедневный cron-задачу, которая удаляет ревизии старше 30 дней. Можно изменить интервал и время по необходимости.
3. Использование плагинов для управления ревизиями
Если хочется обойтись без кода, существуют плагины, которые позволяют контролировать ревизии и очищать базу, например:
- WP-Optimize — помимо очистки ревизий, оптимизирует базу данных и кеширует сайт.
- Advanced Database Cleaner — позволяет удалять ревизии, черновики, спам и многое другое с расписанием.
Но если нужна более тонкая настройка или интеграция — лучше использовать собственный код, как показано выше.
Ограничение количества ревизий для новых записей
Чтобы не накапливать ревизии слишком сильно, можно ограничить их количество в WordPress через файл wp-config.php. Добавьте туда строку:
define('WP_POST_REVISIONS', 5); // хранить максимум 5 ревизийЭто позволит WordPress автоматически удалять более старые ревизии при создании новых.
Пример комплексного решения с учётом плагинов и безопасности
Если на сайте установлен плагин Clearfy Pro, можно использовать встроенные функции оптимизации базы данных, которые включают удаление ревизий с настройками расписания и исключениями. Это удобный способ для тех, кто не хочет самостоятельно писать код.
При написании собственного кода важно всегда делать резервное копирование базы перед очисткой, особенно если удаляются данные напрямую через SQL.
Выводы и рекомендации
Удаление старых ревизий — простой и важный шаг для оптимизации сайта на WordPress. Это помогает снизить нагрузку на базу данных, ускорить сайт и упростить обслуживание. Рекомендуется:
- Ограничить количество ревизий через
WP_POST_REVISIONS. - Настроить регулярное удаление старых ревизий с помощью WP-CLI или собственного кода.
- Использовать проверенные плагины для оптимизации базы данных.
- Перед удалением делать резервную копию базы.
Такой подход обеспечит стабильную и быструю работу WordPress сайта без лишних данных.