В WordPress при каждом сохранении записи создаются ревизии — их задача хранить историю изменений поста. Это удобно для отката к предыдущим версиям, но со временем ревизии накапливаются и могут значительно увеличить размер базы данных, замедляя работу сайта. В этой статье расскажу, как самостоятельно удалять старые ревизии постов без использования плагинов, а также как грамотно контролировать количество сохраняемых ревизий.
Почему важно удалять старые ревизии WordPress
Ревизии постов в WordPress создаются по умолчанию и сохраняются в таблице wp_posts с типом revision. Если у вас большой сайт с сотнями или тысячами записей, ревизии могут занимать значительное место в базе данных. Это ведет к нескольким проблемам:
- Увеличение размера базы данных, что влияет на время резервного копирования и восстановления.
- Замедление запросов к базе данных, особенно при выборках постов или администрировании.
- Потенциальное усложнение миграций и переносов сайта.
Удаление старых ревизий помогает оптимизировать работу сайта и снизить нагрузку на сервер.
Как вручную удалить все старые ревизии постов через SQL-запрос
Самый прямой способ — выполнить SQL-запрос, который удалит все ревизии из таблицы wp_posts. Сделать это можно через phpMyAdmin, Adminer или консоль MySQL.
DELETE FROM wp_posts WHERE post_type = 'revision';Однако такой подход полностью удалит все ревизии, включая последние, что не всегда желательно. Лучше настроить выборочное удаление или ограничение количества ревизий.
Учтите, что префикс таблиц wp_ может отличаться — проверьте свой вариант и замените в запросе.
Удаление ревизий по определённому условию
Если нужно удалить ревизии старше, например, 30 дней, используйте запрос с датой:
DELETE FROM wp_posts WHERE post_type = 'revision' AND post_date < DATE_SUB(NOW(), INTERVAL 30 DAY);Так вы сохраните свежие ревизии за последний месяц, удалив более старые.
Создание функции для автоматического удаления ревизий через WP-CLI или в коде темы
Для автоматизации процесса удаления ревизий без плагинов можно добавить функцию в файл functions.php вашей темы или создать кастомный скрипт для WP-CLI.
Пример функции для удаления ревизий старше 30 дней:
function wpgenerate_delete_old_revisions() {
global $wpdb;
$days = 30;
$table = $wpdb->posts;
$result = $wpdb->query(
$wpdb->prepare(
"DELETE FROM $table WHERE post_type = 'revision' AND post_date < DATE_SUB(NOW(), INTERVAL %d DAY)",
$days
)
);
return $result;
}Вы можете вызвать эту функцию вручную через админку, например, при помощи AJAX или WP-CLI, либо поставить её на cron-задачу для регулярного удаления.
Пример интеграции с WP-Cron
Добавим регулярное задание, которое будет вызывать очистку ревизий раз в неделю:
add_action('wpgenerate_weekly_revision_cleanup', 'wpgenerate_delete_old_revisions');
if (!wp_next_scheduled('wpgenerate_weekly_revision_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wpgenerate_weekly_revision_cleanup');
}Этот код ставит задачу, которая еженедельно удаляет ревизии старше 30 дней, снижая нагрузку без вмешательства администратора.
Ограничение количества ревизий в WordPress через wp-config.php
Чтобы не накапливалось слишком много ревизий, можно ограничить их число в конфигурационном файле wp-config.php. Добавьте туда строку:
define('WP_POST_REVISIONS', 5);Это ограничит количество ревизий для каждого поста до 5 последних. Более старые автоматически удаляются при сохранении новых.
Если установить значение false, то ревизии вообще не будут сохраняться, но это не рекомендуется, так как теряется возможность отката.
Плагины для управления ревизиями и оптимизации базы данных
Если вы не хотите писать код самостоятельно, можно использовать плагины, которые делают то же самое с удобным интерфейсом:
- WP-Optimize — удаляет ревизии, спам, очищает базу данных и кеш.
- Revision Control — позволяет гибко настроить количество ревизий для каждого типа поста.
- Clearfy Pro — комплексный оптимизатор, в том числе для ревизий, который можно использовать для автоматизации очистки базы.
Практические советы для оптимизации хранения ревизий
Чтобы эффективно управлять ревизиями, рекомендую:
- Ограничить количество ревизий через
WP_POST_REVISIONS. - Раз в месяц запускать удаление старых ревизий.
- Периодически оптимизировать таблицы базы данных, используя SQL-команду
OPTIMIZE TABLE wp_posts;или WP-CLI. - Использовать инструменты мониторинга базы данных, чтобы отслеживать рост таблиц.
Соблюдая эти рекомендации, вы поддержите скорость и стабильность работы WordPress без лишней нагрузки.