Что такое ревизии в WordPress и зачем их удалять
WordPress автоматически сохраняет каждое изменение записи или страницы в виде ревизий. Это удобно, если нужно вернуться к предыдущей версии текста. Однако при активном редактировании количество ревизий быстро растёт, занимая место в базе данных и замедляя работу сайта. Особенно это заметно на крупных сайтах с тысячами постов.
Удаление старых ревизий помогает оптимизировать базу данных, улучшить производительность сайта и уменьшить нагрузку на сервер. В этой статье рассмотрим, как удалить ревизии без использования плагинов, чтобы сохранить полный контроль над процессом.
Рассмотрим два основных способа: с помощью SQL-запросов к базе данных и с помощью кастомного PHP-скрипта, который можно добавить в functions.php или выполнить отдельно.
Удаление ревизий через SQL-запросы
Первый и самый быстрый способ — напрямую удалить все ревизии из таблицы wp_posts. Ревизии имеют тип post_type = 'revision', что позволяет легко их идентифицировать.
Чтобы удалить все ревизии из базы данных, используйте следующий SQL-запрос. Его можно выполнить через phpMyAdmin, Adminer или другой инструмент для работы с базой данных:
DELETE FROM wp_posts WHERE post_type = 'revision';Этот запрос удалит все ревизии без возможности восстановления, поэтому сделайте резервную копию базы данных перед выполнением. После удаления ревизий рекомендуется оптимизировать таблицу:
OPTIMIZE TABLE wp_posts;Если вы хотите удалить ревизии только для определённых постов или за определённый период времени, запрос можно усложнить. Например, удалить ревизии старше 30 дней:
DELETE FROM wp_posts WHERE post_type = 'revision' AND post_date < NOW() - INTERVAL 30 DAY;Кастомный PHP-скрипт для удаления ревизий
Если вы предпочитаете управлять процессом из WordPress, можно написать собственную функцию, которая удалит ревизии через WP_Query и функции WordPress. Это полезно, если вы хотите добавить удаление ревизий в административный интерфейс или запускать периодически через WP-Cron.
Пример функции для удаления ревизий в WordPress, которую можно добавить в файл functions.php вашей темы или в отдельный плагин:
function omni_video_delete_old_revisions() {
global $wpdb;
$revisions = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision'");
if (!empty($revisions)) {
foreach ($revisions as $revision_id) {
wp_delete_post($revision_id, true); // true для безвозвратного удаления
}
}
return count($revisions);
}Для вызова функции можно использовать хук администратора или добавить кнопку в панель управления. Вот пример добавления страницы в админку с кнопкой для запуска очистки:
add_action('admin_menu', 'omni_video_add_revision_cleaner_page');
function omni_video_add_revision_cleaner_page() {
add_submenu_page('tools.php', 'Удалить ревизии', 'Удалить ревизии', 'manage_options', 'omni-video-clean-revisions', 'omni_video_revision_cleaner_page');
}
function omni_video_revision_cleaner_page() {
if (isset($_POST['omni_video_delete_revisions'])) {
check_admin_referer('omni_video_delete_revisions_nonce');
$deleted = omni_video_delete_old_revisions();
echo "<div class=\"updated notice\">Удалено ревизий: $deleted</div>";
}
echo '<form method="post">';
wp_nonce_field('omni_video_delete_revisions_nonce');
echo '<input type="submit" name="omni_video_delete_revisions" class="button button-primary" value="Удалить все ревизии" />';
echo '</form>';
}Дополнительные способы оптимизации базы данных WordPress
Удаление ревизий — важный шаг, но не единственный для оптимизации базы данных. Рассмотрим несколько дополнительных рекомендаций:
- Ограничение числа ревизий: В файле
wp-config.phpможно задать константуWP_POST_REVISIONS, чтобы ограничить количество сохраняемых ревизий. Например, чтобы хранить не более 3 ревизий:
define('WP_POST_REVISIONS', 3);- Оптимизация таблиц: Регулярно запускайте
OPTIMIZE TABLEили используйте плагины для оптимизации, например WP-Optimize. - Очистка метаданных: Удаляйте старые или неиспользуемые метаданные и транзиенты через SQL или плагины.
Все эти меры вместе помогут держать базу данных в порядке и ускорят работу сайта.
Популярные плагины для управления ревизиями и оптимизации базы данных
Если всё же хотите использовать плагины, вот несколько проверенных решений:
- WP-Sweep: Позволяет удалять ревизии, метаданные, спам-комментарии, транзиенты и оптимизировать таблицы базы данных одним кликом.
- Advanced Database Cleaner: Предоставляет расширенный функционал для очистки и оптимизации базы, включая ревизии, авточерновики и пр.
- WP-Optimize: Многофункциональный плагин для очистки и кеширования, также умеет удалять ревизии и оптимизировать таблицы.
Однако использование плагинов добавляет нагрузку, поэтому ручное удаление ревизий остаётся предпочтительным для опытных пользователей.