Что такое версии постов (ревизии) в WordPress и зачем их удалять
WordPress автоматически сохраняет версии постов (ревизии) при каждом сохранении публикации. Это удобная функция, позволяющая откатиться к предыдущим вариантам текста. Однако с течением времени база данных наполняется множеством ревизий, что увеличивает размер таблиц и замедляет работу сайта, особенно на хостингах с ограниченными ресурсами.
Удаление старых ревизий помогает оптимизировать базу данных, снизить время отклика и уменьшить нагрузку. В этой статье расскажем, как безопасно удалить версии постов и предотвратить их чрезмерное накопление в будущем.
Удаление ревизий с помощью плагинов — лучшие решения
Если вы предпочитаете решения без кода, можно воспользоваться проверенными плагинами из репозитория WordPress:
- WP-Optimize — комплексный плагин для очистки базы данных и оптимизации сайта. Позволяет удалять ревизии, спам-комментарии, черновики и многое другое.
- Better Delete Revision — специализированный плагин, который сканирует и удаляет все ревизии из базы данных, показывая статистику освобожденного места.
- Optimize Database after Deleting Revisions — автоматизирует процесс удаления ревизий и оптимизации таблиц, можно настроить расписание.
Использование плагина — быстрый и безопасный способ, особенно если вы не хотите работать с базой данных напрямую.
Удаление ревизий вручную через SQL-запросы
Если вы уверены и имеете доступ к phpMyAdmin или другой панели управления базой данных, можно удалить ревизии напрямую:
DELETE FROM wp_posts WHERE post_type = 'revision';Этот запрос удалит все ревизии для всех типов постов. Перед выполнением обязательно сделайте резервную копию базы данных.
Также можно узнать, сколько ревизий занимает места, выполнив:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';После удаления желательно оптимизировать таблицу:
OPTIMIZE TABLE wp_posts;Это освободит место на диске и улучшит производительность.
Автоматическое ограничение количества ревизий с помощью кода
Чтобы ревизии не накапливались бесконтрольно, можно ограничить их число в конфигурационном файле wp-config.php. Добавьте туда строку:
define('WP_POST_REVISIONS', 3);Это ограничит количество ревизий для каждого поста тремя последними версиями. Можно указать любое число или поставить false, чтобы отключить ревизии полностью (не рекомендуется).
Пример функции с префиксом домена для ограничения ревизий программно:
function wp_gpt_limit_revisions() {
return 3; // Максимум 3 ревизии
}
add_filter('wp_revisions_to_keep', 'wp_gpt_limit_revisions', 10, 2);Этот фильтр позволяет гибко контролировать количество ревизий на уровне кода.
Удаление ревизий программно через WP_Query и wp_delete_post_revision()
Если нужно реализовать удаление ревизий через собственный скрипт или плагин, можно использовать WP_Query для выбора ревизий и функцию wp_delete_post_revision() для их удаления.
function wp_gpt_delete_all_revisions() {
$revisions = new WP_Query([
'post_type' => 'revision',
'posts_per_page' => -1,
'fields' => 'ids',
]);
foreach ($revisions->posts as $revision_id) {
wp_delete_post_revision($revision_id);
}
}
// Используйте с осторожностью, например, привяжите к хуку или вызовите вручную
// wp_gpt_delete_all_revisions();Этот код удалит все ревизии, используя штатные функции WordPress, что безопаснее прямого удаления из базы данных.
Профилактика и рекомендации по работе с ревизиями
Чтобы не сталкиваться с перегрузкой базы данных ревизиями:
- Ограничивайте количество ревизий с помощью
WP_POST_REVISIONSили фильтраwp_revisions_to_keep. - Регулярно очищайте базу данных с помощью плагинов или собственных скриптов.
- Используйте автоматическую оптимизацию таблиц базы данных, например, с помощью WP-Optimize.
- Избегайте чрезмерного использования автосохранения, если оно не нужно.
Правильный подход к ревизиям поможет сохранить быстродействие сайта и уменьшить нагрузку на сервер.
Заключение
Удаление и управление версиями постов — важная задача для оптимизации WordPress-сайта, особенно при большом объеме контента. Используйте плагины для простоты или код для гибкости. Всегда делайте резервные копии перед массовыми изменениями базы данных.