Версии записей (post revisions) в WordPress — это удобный механизм для сохранения истории изменений контента. Однако при активном создании и редактировании страниц и записей количество таких версий может вырасти до сотен и тысяч, что негативно влияет на размер базы данных и скорость работы сайта.
Что такое версии записей и почему их нужно контролировать
Каждый раз, когда вы сохраняете или обновляете запись, WordPress сохраняет её копию как версию. Это помогает откатиться к предыдущей редакции, если что-то пошло не так. Однако со временем эти версии накапливаются, занимая место в таблице wp_posts и замедляя запросы к базе данных.
Особенно актуально для сайтов с большим количеством контента и частыми обновлениями. Контроль количества версий помогает поддерживать базу в оптимальном состоянии без потери функциональности.
По умолчанию WordPress не ограничивает количество версий, но это можно исправить с помощью настроек и кода.
Как вручную удалить все версии записей через SQL-запрос
Если база данных уже содержит много версий, можно очистить их с помощью прямого SQL-запроса. Но перед этим обязательно сделайте резервную копию базы данных!
Вот пример запроса для удаления всех версий:
DELETE FROM wp_posts WHERE post_type = 'revision';
Этот запрос удалит все версии. Если у вас префикс таблиц отличается, замените wp_ на ваш префикс.
После этого база станет легче, но для предотвращения повторного накопления нужно ограничить число версий.
Ограничение количества версий с помощью константы в wp-config.php
Для контроля количества версий добавьте в файл wp-config.php следующую строку:
define('WP_POST_REVISIONS', 5);
Это ограничит количество сохраняемых версий до 5. Старые версии будут автоматически удаляться при сохранении новых.
Если нужно отключить версии полностью, можно поставить значение false:
define('WP_POST_REVISIONS', false);
Но будьте осторожны — это уберёт возможность отката изменений.
Автоматическое удаление старых версий с помощью хука и пользовательской функции
Если вы хотите более гибко контролировать процесс, можно добавить функцию, которая будет удалять старые версии по расписанию или при определенных условиях.
Пример функции, удаляющей версии старше 30 дней:
function wpdir_delete_old_revisions() {
global $wpdb;
$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_date < %s",
$date
));
if (!empty($revisions)) {
foreach ($revisions as $revision_id) {
wp_delete_post($revision_id, true);
}
}
}
add_action('wp_scheduled_delete', 'wpdir_delete_old_revisions');
Эта функция подключается к событию wp_scheduled_delete, которое запускается по расписанию WordPress для удаления мусора.
Плагины для управления версиями записей
Если вы предпочитаете готовые решения, можно использовать плагины, которые позволяют контролировать версии через интерфейс, например:
- Disable Post Revisions — простой плагин для отключения версий.
- Clearfy Pro — многофункциональный плагин с возможностью ограничивать версии и оптимизировать базу.
Плагин Clearfy Pro полезен тем, что объединяет в себе не только управление версиями, но и другие инструменты для повышения производительности и безопасности.
Как проверить количество версий в базе данных
Для оценки «веса» версий можно выполнить запрос:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';
Это покажет количество текущих версий. Если число большое (сотни и тысячи), стоит задуматься об оптимизации.
Итоги и рекомендации по управлению версиями
Управление версиями записей — важный аспект поддержания производительности WordPress-сайта. Вот основные рекомендации:
- Регулярно удаляйте старые версии через SQL или автоматические функции.
- Ограничьте количество версий с помощью константы
WP_POST_REVISIONS. - Используйте проверенные плагины, например Clearfy Pro, для удобного управления и оптимизации.
- Обязательно делайте резервные копии базы перед массовым удалением.
Такой подход позволит поддерживать базу данных в чистоте и повысить скорость работы вашего сайта.