В WordPress по умолчанию включено сохранение ревизий постов — это удобно, если вы хотите вернуть предыдущие версии материалов. Однако со временем база данных накапливает большое количество ревизий, включая неактуальные или дублирующие версии, что замедляет работу сайта и увеличивает размер базы. В этой статье мы подробно разберём, как удалить старые псевдоверсии (ревизии) постов в WordPress, используя как код, так и плагины, а также расскажем, как избежать их избыточного накопления в будущем.
Что такое псевдоверсии постов в WordPress и зачем их удалять
Ревизии (или версии) — это автоматические сохранённые копии постов и страниц, которые WordPress создаёт при редактировании. Они позволяют откатиться к предыдущему варианту контента.
Однако:
- С каждым изменением создаётся новая ревизия, и их количество быстро растёт.
- Старая и неактуальная информация остаётся в базе, занимая место.
- Избыточные ревизии замедляют запросы к базе данных, особенно на крупных сайтах.
Поэтому иногда необходимо очистить базу от старых ревизий, сохранив при этом актуальные версии.
Удаление ревизий через SQL-запросы: быстро и эффективно
Самый прямой способ — удалить ревизии напрямую из базы данных MySQL. Ревизии — это записи с типом revision в таблице wp_posts. Вот пример запроса, который удалит все ревизии:
DELETE FROM wp_posts WHERE post_type = 'revision';
Однако такой подход удалит все ревизии без разбора, что не всегда желательно. Лучше удалять только старые ревизии, например, старше 30 дней:
DELETE FROM wp_posts WHERE post_type = 'revision' AND post_date < NOW() - INTERVAL 30 DAY;
Перед выполнением запросов обязательно сделайте резервную копию базы данных.
Добавление функции для удаления старых ревизий через PHP
Чтобы автоматизировать процесс удаления ревизий, можно добавить в файл functions.php темы или в отдельный плагин следующий код:
function wpcourse_delete_old_revisions() {
global $wpdb;
$days = 30; // удалять ревизии старше 30 дней
$table = $wpdb->posts;
$query = $wpdb->prepare(
"DELETE FROM $table WHERE post_type = 'revision' AND post_date < %s",
date('Y-m-d H:i:s', strtotime("-{$days} days"))
);
$wpdb->query($query);
}
// Запуск функции при активации темы (можно заменить на хуки по расписанию)
add_action('after_switch_theme', 'wpcourse_delete_old_revisions');
Этот код удалит все ревизии старше 30 дней при активации темы. Для регулярного удаления можно использовать WP-Cron.
Ограничение количества ревизий в WordPress
Чтобы предотвратить накопление большого числа ревизий, можно ограничить их количество с помощью константы WP_POST_REVISIONS. Добавьте в wp-config.php:
define('WP_POST_REVISIONS', 5); // хранить не более 5 ревизий на пост
Так WordPress будет сохранять не более 5 последних ревизий каждого поста, удаляя более старые автоматически.
Удаление ревизий с помощью плагинов
Если вы предпочитаете готовые решения, рассмотрите следующие плагины:
- WP-Optimize — комплексный плагин для оптимизации базы, включая удаление ревизий.
- Revision Control — позволяет управлять количеством ревизий для каждого типа постов.
- Clearfy Pro — платный плагин для оптимизации производительности и управления ревизиями.
Использование плагинов удобно для тех, кто не хочет работать с кодом напрямую, но требует регулярного обслуживания.
Как безопасно работать с ревизиями и не потерять данные
Удаление ревизий — операция, которая может привести к потере важных данных, если не соблюдать осторожность. Вот рекомендации:
- Всегда делайте резервные копии базы перед удалением.
- Используйте ограничение количества ревизий, чтобы не накапливать слишком много.
- Удаляйте только старые ревизии, сохраняя свежие.
- Проверяйте работоспособность сайта после очистки.
Автоматизация удаления ревизий по Cron
Чтобы регулярно очищать старые ревизии, можно использовать WP-Cron. Пример кода для еженедельного удаления ревизий старше 30 дней:
function wpcourse_schedule_revision_cleanup() {
if (!wp_next_scheduled('wpcourse_weekly_revision_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wpcourse_weekly_revision_cleanup');
}
}
add_action('wp', 'wpcourse_schedule_revision_cleanup');
function wpcourse_do_revision_cleanup() {
global $wpdb;
$days = 30;
$table = $wpdb->posts;
$query = $wpdb->prepare(
"DELETE FROM $table WHERE post_type = 'revision' AND post_date < %s",
date('Y-m-d H:i:s', strtotime("-{$days} days"))
);
$wpdb->query($query);
}
add_action('wpcourse_weekly_revision_cleanup', 'wpcourse_do_revision_cleanup');
Этот код создаёт событие, которое каждую неделю удаляет старые ревизии автоматически.
Заключение
Удаление старых псевдоверсий постов в WordPress — важный шаг для оптимизации базы данных и ускорения сайта. Выбор метода зависит от ваших навыков и предпочтений: это может быть прямое удаление через SQL, использование небольшого кода в теме или плагинах, либо применение готовых инструментов как Clearfy Pro, которые упрощают управление ревизиями и оптимизацию в целом.
Если хотите узнать больше о профессиональных инструментах для WordPress, рекомендуем ознакомиться с Clearfy Pro — плагином, который поможет не только с ревизиями, но и с другими задачами оптимизации и безопасности.