Ревизии в WordPress — это полезный инструмент для сохранения истории изменений записей и страниц. Однако с течением времени количество ревизий растет, и это может привести к значительному увеличению размера базы данных, замедлению работы сайта и усложнению его обслуживания. В этой статье разберем, как автоматизировать удаление устаревших ревизий, сохраняя при этом полезную историю, и рассмотрим различные способы решения задачи с примерами кода и плагинами.
Почему важно контролировать количество ревизий в WordPress
Каждый раз, когда вы сохраняете запись или страницу, WordPress создает новую ревизию. Для активных сайтов с большим количеством контента и частыми правками ревизии могут накапливаться в огромных объемах. Это приводит к:
- Увеличению размера базы данных, что замедляет запросы и резервное копирование.
- Повышенной нагрузке на сервер при частом обращении к таблице ревизий.
- Сложностям при работе с админкой, если ревизий слишком много.
Оптимизация ревизий — часть общей стратегии оптимизации WordPress, направленная на ускорение сайта и облегчение его поддержки.
Ограничение количества ревизий через wp-config.php
Самый простой способ контролировать ревизии — задать лимит в файле wp-config.php. Добавьте туда строку:
define('WP_POST_REVISIONS', 5);
Это ограничит количество сохраняемых ревизий каждой записи пятью последними версиями. Старые ревизии будут автоматически удаляться при сохранении новых.
Если задать значение false, ревизии будут полностью отключены, но это не рекомендуется, так как можно потерять важную историю изменений.
Автоматическое удаление ревизий с помощью WP-Cron
Самое удобное решение — настроить автоматическую очистку ревизий с определенной периодичностью. Для этого можно использовать функцию, которую подключим через хук WordPress:
function wphost_delete_old_revisions() {
global $wpdb;
// Удаляем ревизии старше 30 дней
$days = 30;
$wpdb->query( $wpdb->prepare(
"DELETE FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_date < DATE_SUB(NOW(), INTERVAL %d DAY)",
$days
));
}
add_action('wphost_daily_cleanup', 'wphost_delete_old_revisions');
if (!wp_next_scheduled('wphost_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wphost_daily_cleanup');
}
Этот код создаст ежедневное задание, которое будет удалять ревизии старше 30 дней. Вы можете изменить период в переменной $days под свои нужды.
Как проверить и запустить WP-Cron вручную
Иногда WP-Cron не срабатывает из-за особенностей хостинга. Чтобы проверить работу задачи, можно использовать плагин WP Crontrol, который позволяет управлять и запускать задачи вручную.
Использование плагинов для удаления ревизий
Если вы предпочитаете готовые решения, обратите внимание на следующие плагины:
- Clearfy Pro — содержит инструменты для оптимизации базы, включая удаление ревизий и мусорных данных.
- Revision Control — позволяет настроить лимиты ревизий для каждого типа записей и автоматически очищает старые.
- WP-Optimize — плагин для комплексной оптимизации базы данных, включая удаление ревизий.
Использование плагинов удобно для тех, кто не хочет работать с кодом, но важно выбирать проверенные и регулярно обновляемые решения.
Пример расширенного решения: удаление ревизий с логированием
Для более продвинутых сценариев можно добавить логирование удаленных ревизий для аудита. Ниже пример функции, которая удаляет ревизии и записывает количество удаленных записей в лог:
function wphost_delete_revisions_with_log() {
global $wpdb;
$days = 30;
$count = $wpdb->get_var( $wpdb->prepare(
"SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_date < DATE_SUB(NOW(), INTERVAL %d DAY)",
$days
));
$result = $wpdb->query( $wpdb->prepare(
"DELETE FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_date < DATE_SUB(NOW(), INTERVAL %d DAY)",
$days
));
if ($result !== false) {
error_log( "[wphost] Удалено {$result} ревизий старше {$days} дней." );
} else {
error_log( "[wphost] Ошибка при удалении ревизий." );
}
}
add_action('wphost_daily_cleanup', 'wphost_delete_revisions_with_log');
if (!wp_next_scheduled('wphost_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wphost_daily_cleanup');
}
Такой подход поможет отслеживать эффективность очистки и выявлять возможные проблемы.
Заключение по оптимизации ревизий в WordPress
Автоматизация удаления ревизий — важный шаг для поддержания производительности и чистоты базы данных WordPress. Выбор метода зависит от ваших навыков и предпочтений: можно ограничить ревизии через wp-config.php, написать собственный код для регулярной очистки или использовать проверенные плагины, такие как Clearfy Pro. Главное — не забывать о регулярном обслуживании, чтобы сайт оставался быстрым и надежным.