Работа с большими сайтами на WordPress часто сопровождается заметным разрастанием базы данных из-за большого количества ревизий постов. Ревизии – это автоматически создаваемые версии записей и страниц, которые позволяют отменить изменения, но со временем их становится слишком много. Это замедляет работу сайта и увеличивает размер базы данных, что негативно влияет на производительность и резервное копирование.
Что такое ревизии в WordPress и зачем их удалять
Ревизии — это версии записей, которые WordPress сохраняет автоматически при редактировании. По умолчанию WordPress не ограничивает количество ревизий, в результате чего база данных накапливает сотни и тысячи записей, которые редко используются.
Удаление старых ревизий помогает:
- Снизить нагрузку на базу данных.
- Ускорить резервное копирование и восстановление.
- Повысить общую производительность сайта.
Но стоит помнить, что полностью отключать ревизии не рекомендуется, так как они полезны для отката ошибок.
Плагины для автоматического удаления ревизий в WordPress
Для автоматизации удаления старых ревизий можно использовать плагины, которые работают по расписанию или при достижении определенного количества ревизий. Вот несколько популярных и надежных вариантов:
WP-Optimize
Комплексный плагин для оптимизации базы данных. Позволяет удалять ревизии, спам-комментарии, черновики и многое другое. Есть функция автоматической очистки по расписанию.
Simple Revisions Delete
Простой и легкий плагин для массового удаления старых ревизий. Позволяет удалять определенное количество ревизий или все сразу, поддерживает выборочную очистку по типу постов.
Optimize Database after Deleting Revisions
Плагин не только удаляет ревизии, но и оптимизирует таблицы базы данных, что дополнительно повышает скорость работы сайта.
Как написать свою функцию для автоматического удаления старых ревизий
Иногда хочется иметь полный контроль и добавить удаление ревизий с кастомными правилами. Для этого можно реализовать функцию, которая будет запускаться по крону и удалять ревизии старше определенного времени или превышающие лимит.
Пример функции wparticles_delete_old_revisions:
function wparticles_delete_old_revisions() {
global $wpdb;
// Удаляем ревизии старше 30 дней
$days = 30;
$date = date('Y-m-d H:i:s', strtotime('-' . $days . ' days'));
$revisions = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM $wpdb->posts WHERE post_type = 'revision' AND post_modified < %s",
$date
));
if ($revisions) {
foreach ($revisions as $revision_id) {
wp_delete_post($revision_id, true);
}
}
}Эту функцию нужно привязать к крону WordPress, например, раз в неделю:
function wparticles_schedule_revision_cleanup() {
if (!wp_next_scheduled('wparticles_weekly_revision_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wparticles_weekly_revision_cleanup');
}
}
add_action('wp', 'wparticles_schedule_revision_cleanup');
add_action('wparticles_weekly_revision_cleanup', 'wparticles_delete_old_revisions');Такой подход позволяет гибко управлять удалением ревизий и не перегружать сайт при массовых операциях.
Ограничение количества ревизий для новых постов
Чтобы избежать накопления большого числа ревизий, можно ограничить их количество на уровне настроек WordPress с помощью константы WP_POST_REVISIONS в файле wp-config.php.
Например, чтобы сохранять максимум 5 ревизий на пост:
define('WP_POST_REVISIONS', 5);Это значительно снизит объем создаваемых ревизий и поможет держать базу данных в порядке с самого начала.
Дополнительные советы по работе с ревизиями
- Регулярно делайте резервные копии базы данных перед очисткой.
- Проверяйте размер таблицы
wp_postsиwp_postmeta— ревизии влияют и на эти таблицы. - Используйте специализированные утилиты оптимизации для базы данных.
Соблюдение этих простых правил поможет поддерживать базу данных WordPress легкой и быстрой, что положительно скажется на скорости загрузки сайта и удобстве работы.