База данных WordPress со временем может значительно разрастаться, что негативно сказывается на скорости работы сайта и нагрузке на сервер. Одним из главных факторов увеличения объема базы данных являются старые ревизии записей и страниц, которые WordPress сохраняет автоматически при каждом изменении. В этой статье мы подробно разберём, как эффективно удалять старые ревизии, а также настроить автоматическую оптимизацию базы данных с помощью кода и плагинов.
Что такое ревизии в WordPress и почему их стоит удалять
Ревизии — это предыдущие версии записей и страниц, которые WordPress сохраняет, чтобы вы могли откатиться к более раннему варианту. Однако без контроля количество ревизий может достигать сотен на одном посте, что увеличивает размер таблиц wp_posts и wp_postmeta.
Это ведёт к:
- Увеличению размера базы данных
- Замедлению запросов к базе
- Увеличению времени резервного копирования
Поэтому регулярное удаление старых ревизий — важная часть поддержки производительности сайта.
Ручное удаление ревизий через SQL-запрос
Если у вас есть доступ к phpMyAdmin или другой панели управления базой данных, можно выполнить простой запрос для удаления всех ревизий:
DELETE FROM wp_posts WHERE post_type = 'revision';
Этот запрос удалит все ревизии из таблицы wp_posts. После этого рекомендуется выполнить оптимизацию таблицы:
OPTIMIZE TABLE wp_posts;
Однако этот метод требует ручного вмешательства и не подходит для регулярного использования.
Автоматическое удаление ревизий с помощью пользовательской функции
Для автоматизации процесса можно создать функцию, которая будет удалять ревизии по расписанию. Ниже пример кода, который можно добавить в файл functions.php вашей темы или в отдельный плагин:
function wpsolution_delete_old_revisions() {
global $wpdb;
$deleted = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
if (false !== $deleted) {
$wpdb->query("OPTIMIZE TABLE {$wpdb->posts}");
}
}
// Запускаем задачу раз в неделю
if (!wp_next_scheduled('wpsolution_weekly_revision_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wpsolution_weekly_revision_cleanup');
}
add_action('wpsolution_weekly_revision_cleanup', 'wpsolution_delete_old_revisions');
Этот код создаёт планировщик задач WP-Cron, который еженедельно удаляет все ревизии из базы. Это простой способ поддерживать базу данных в оптимальном состоянии без постоянного ручного вмешательства.
Ограничение количества ревизий для новых записей
Чтобы контролировать количество ревизий, создаваемых WordPress для новых записей, можно добавить в wp-config.php следующую строку:
define('WP_POST_REVISIONS', 3);
Это ограничит количество ревизий тремя последними версиями для каждой записи. Вы также можете полностью отключить ревизии, установив значение false вместо числа, но это не рекомендуется, так как потеряется возможность отката изменений.
Использование плагинов для оптимизации базы данных
Если вы предпочитаете готовые решения, можно воспользоваться плагинами, которые не только удаляют ревизии, но и проводят комплексную оптимизацию базы. Вот несколько популярных вариантов:
- Clearfy Pro — очень мощный плагин для оптимизации и ускорения сайта, включая удаление ревизий и оптимизацию таблиц.
- WPRemark — плагин с функциями очистки базы и управления ревизиями.
Плагины удобны тем, что имеют графический интерфейс и позволяют запускать оптимизацию в любое время без необходимости писать код.
Советы по безопасности при работе с базой данных
При удалении данных из базы важно соблюдать меры предосторожности:
- Обязательно сделайте резервную копию базы перед выполнением любых операций удаления.
- Тестируйте SQL-запросы на тестовом сайте или локальной копии.
- Используйте возможности WordPress для планирования задач, чтобы не перегружать базу при пиковых нагрузках.
Это поможет избежать потери данных и сбоев в работе сайта.
Дополнительные методы оптимизации базы данных WordPress
Помимо удаления ревизий, рекомендуется периодически очищать базу от:
- Спам-комментариев и мусорных записей
- Транзиентов (временных кешированных данных)
- Автосохранений, которые часто остаются после редактирования
Для этого можно добавить в функцию автоматической очистки дополнительные запросы, например:
function wpsolution_extended_cleanup() {
global $wpdb;
// Удаляем ревизии
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
// Удаляем мусорные комментарии
$wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'");
// Удаляем транзиенты
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%'");
$wpdb->query("OPTIMIZE TABLE {$wpdb->posts}, {$wpdb->comments}, {$wpdb->options}");
}
add_action('wpsolution_weekly_revision_cleanup', 'wpsolution_extended_cleanup');
Такой подход позволит поддерживать базу данных в отличном состоянии и улучшит общую производительность сайта.