Ревизии записей в WordPress — это очень полезная функция, которая позволяет сохранять несколько версий статьи или страницы, чтобы в любой момент можно было откатиться к предыдущей версии. Однако со временем, особенно на больших сайтах с большим количеством контента, количество ревизий растёт, что приводит к значительному увеличению размера базы данных и замедлению работы сайта.
Что такое ревизии записей и почему их нужно удалять
Ревизии — это автосохранённые версии ваших записей и страниц. По умолчанию WordPress сохраняет каждое изменение как отдельную ревизию, что удобно для восстановления данных. Но если не ограничивать их количество и не очищать старые, то таблица wp_posts (где ревизии хранятся) разрастается, замедляя запросы к базе данных.
Удаление старых ревизий помогает:
- Оптимизировать размер базы данных;
- Ускорить загрузку административной панели;
- Повысить общую производительность сайта;
- Снизить нагрузку на резервное копирование и обслуживание базы данных.
Ограничение количества ревизий через wp-config.php
Самый простой способ контролировать количество ревизий — задать лимит в файле wp-config.php. Добавьте в него следующую строку:
define('WPTASK_MAX_REVISIONS', 5);Замените 5 на желаемое количество ревизий, которые нужно сохранять. WordPress будет хранить не более этого числа ревизий для каждой записи.
Чтобы эта константа работала, её надо определить именно как WP_POST_REVISIONS. Исправленный вариант:
define('WP_POST_REVISIONS', 5);Но если вы хотите использовать собственную константу, например WPTASK_MAX_REVISIONS, тогда нужно добавить фильтр, который будет применять это значение:
add_filter('wp_revisions_to_keep', function() {
return defined('WPTASK_MAX_REVISIONS') ? WPTASK_MAX_REVISIONS : 5;
});Удаление всех старых ревизий через SQL-запрос
Если у вас накопилось много ревизий, и вы хотите их удалить разом, это можно сделать напрямую через базу данных. Ниже пример запроса для удаления всех ревизий:
DELETE FROM wp_posts WHERE post_type = 'revision';Внимание! Перед выполнением обязательно сделайте резервную копию базы данных.
Этот запрос удалит все ревизии без разбора, что может быть рискованно, если вы хотите сохранить какие-то версии. Лучше предварительно просмотреть количество ревизий:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';Автоматическое удаление старых ревизий с помощью функции WPTASK_delete_old_revisions()
Чтобы не использовать SQL вручную, можно добавить в файл functions.php вашей темы или создать собственный плагин с такой функцией:
function wptask_delete_old_revisions() {
global $wpdb;
$max_revisions = 5; // Максимум ревизий на запись
// Получаем ID всех записей с ревизиями
$posts = $wpdb->get_col("SELECT DISTINCT post_parent FROM {$wpdb->posts} WHERE post_type = 'revision'");
foreach ($posts 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 18446744073709551615 OFFSET %d",
$post_id, $max_revisions
));
if (!empty($revisions)) {
$ids = implode(',', array_map('intval', $revisions));
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE ID IN ($ids)");
}
}
}
// Запускаем удаление при активации темы или плагина
add_action('after_switch_theme', 'wptask_delete_old_revisions');Эта функция оставляет для каждой записи не более 5 последних ревизий и удаляет остальные. Вы можете изменить число в переменной $max_revisions.
Как запустить функцию вручную
Чтобы запустить удаление в любое время, можете вызвать функцию напрямую из административной панели через плагин типа Code Snippets или добавить временный вызов в functions.php:
add_action('admin_init', 'wptask_delete_old_revisions');После выполнения удалите этот вызов, чтобы не запускать функцию при каждом заходе в админку.
Использование плагинов для управления ревизиями
Если не хотите возиться с кодом, можно использовать плагины. Ниже несколько полезных:
- WP-Optimize — популярный плагин для оптимизации базы данных, который умеет удалять ревизии, спам и другие ненужные данные.
- Delete Revisions — простой плагин специально для удаления ревизий с выбором по дате и количеству.
- Clearfy Pro (https://wpshop.ru/clearfy-pro/?utm_source=wptask.ru&utm_medium=article&utm_campaign=kak-udalit-starye-revizii-zapisej-wordpress) — мощный инструмент для оптимизации WordPress, включая управление ревизиями и отключение ненужных функций.
Плагины обычно предоставляют удобный интерфейс и позволяют настроить очистку ревизий без риска ошибок.
Оптимизация базы после удаления ревизий
После удаления большого количества ревизий таблица wp_posts может оставаться фрагментированной, что снижает производительность. Для оптимизации используйте SQL-запрос:
OPTIMIZE TABLE wp_posts;Или воспользуйтесь плагинами для оптимизации базы, например, WP-Optimize или Clearfy Pro.
Резюме по оптимизации ревизий
- Ограничивайте количество ревизий через
wp-config.phpили фильтры. - Регулярно удаляйте старые ревизии с помощью кода или плагинов.
- Проводите оптимизацию таблиц базы данных после очистки.
- Используйте проверенные инструменты из https://wpshop.ru с utm-метками для удобства и безопасности.