Каждый раз при редактировании записи WordPress сохраняет её новую версию (ревизию). Это удобно, но со временем в базе данных накапливается огромное количество ревизий, что может замедлять работу сайта и занимать лишнее место. В этой статье разберём, как удалить старые версии постов в WordPress, чтобы оптимизировать базу данных и повысить производительность сайта.
Что такое ревизии постов и почему их стоит удалять
Ревизии — это автоматические сохранённые копии записи в процессе её редактирования. Они позволяют вернуться к предыдущей версии, если что-то пошло не так. Но если у вас сотни и тысячи записей с десятками ревизий каждая, база данных разрастается, и запросы к ней начинают выполняться медленнее.
Удаление старых ревизий помогает:
- Сократить размер базы данных.
- Ускорить работу административной панели.
- Уменьшить время резервного копирования.
Однако не стоит удалять все ревизии без разбора — лучше оставлять несколько последних для безопасности.
Удаление ревизий с помощью SQL-запроса
Самый быстрый способ удалить все старые ревизии — выполнить SQL-запрос напрямую в базе данных. Вот пример запроса, который удалит все ревизии, оставив только последние 3 для каждой записи:
DELETE FROM wp_posts WHERE ID NOT IN (SELECT * FROM (SELECT MAX(ID) FROM wp_posts WHERE post_type = 'revision' GROUP BY post_parent) AS t) AND post_type = 'revision';Но такой запрос удалит все ревизии, не оставляя последних 3. Чтобы оставить последние 3 ревизии, можно использовать чуть более сложный подход через PHP, так как SQL-запросы в MySQL не очень удобны для такой задачи.
Удаление ревизий через PHP-функцию с ограничением по количеству
Добавьте в functions.php вашей темы или создайте плагин с таким кодом:
function wptemp_delete_old_revisions() {
global $wpdb;
// Получаем ID записей с ревизиями
$posts = $wpdb->get_col("SELECT DISTINCT post_parent FROM {$wpdb->posts} WHERE post_type = 'revision'");
foreach ($posts as $post_id) {
// Получаем все ревизии для поста, кроме последних 3
$revisions = $wpdb->get_results($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_parent = %d ORDER BY post_modified DESC LIMIT 100 OFFSET 3",
$post_id
));
if ($revisions) {
$revision_ids = wp_list_pluck($revisions, 'ID');
foreach ($revision_ids as $rev_id) {
wp_delete_post($rev_id, true);
}
}
}
}
// Запустите функцию вручную или через админку
wptemp_delete_old_revisions();Этот код перебирает все посты с ревизиями, оставляет для каждого последние 3 ревизии и удаляет остальные. Метод wp_delete_post удаляет записи корректно, учитывая все связи.
Использование плагинов для управления ревизиями
Если вы не хотите работать с кодом, можно использовать плагины:
- WP-Optimize — позволяет очищать базу данных от ревизий, спам-комментариев и других ненужных данных. В настройках можно задать автоматическую очистку.
- Revision Control — позволяет ограничить количество ревизий для каждого типа записи и удалять старые.
Оба плагина бесплатны и просты в использовании, подходят для регулярной очистки базы данных.
Как предотвратить накопление большого числа ревизий в будущем
Чтобы не сталкиваться с проблемой больших баз данных, можно ограничить количество ревизий, которые WordPress будет хранить. Для этого добавьте в wp-config.php следующую строку:
define('WP_POST_REVISIONS', 3);Это ограничит хранение до трёх ревизий на запись. Если хотите полностью отключить ревизии (не рекомендуется), установите значение 0.
Также можно использовать плагин Clearfy Pro, который предлагает управление ревизиями и другие инструменты оптимизации сайта.
Оптимизация базы данных после удаления ревизий
После удаления ревизий в таблице wp_posts желательно оптимизировать базу данных, чтобы освободить занимаемое пространство и улучшить производительность. Это можно сделать через phpMyAdmin или WP-CLI:
OPTIMIZE TABLE wp_posts;Или с помощью плагина WP-Optimize в пару кликов.
Выводы и рекомендации
Удаление старых ревизий — простой и эффективный способ ускорить работу WordPress, особенно на крупных сайтах с большим количеством записей. Для этого можно использовать SQL-запросы, PHP-скрипты или плагины. Важно не забывать про регулярную оптимизацию базы данных и ограничение количества ревизий в будущем.
Если вы хотите комплексное решение по оптимизации и управлению ревизиями, обратите внимание на Clearfy Pro — мощный инструмент для ускорения и очистки WordPress.