Ревизии в WordPress — это автоматические сохранения постов и страниц, которые позволяют откатиться к предыдущим версиям контента. Хотя это полезно, со временем накопление большого числа ревизий может значительно увеличить размер базы данных и замедлить работу сайта. В этой статье мы разберём, как удалить старые ревизии постов с помощью PHP кода, чтобы оптимизировать базу данных и улучшить производительность сайта.
Почему важно удалять старые ревизии WordPress
WordPress по умолчанию сохраняет неограниченное количество ревизий для каждого поста. Если у вас много статей или страниц с долгой историей изменений, количество ревизий может достигать тысяч. Это приводит к:
- Увеличению размера таблиц базы данных, особенно
wp_postsиwp_postmeta. - Замедлению запросов к базе данных, что негативно влияет на скорость загрузки сайта.
- Сложностям с резервным копированием и восстановлением данных.
Удаление старых ревизий помогает поддерживать базу данных в оптимальном состоянии, снижая нагрузку и ускоряя работу сайта.
Как WordPress хранит ревизии постов: технические детали
Ревизии — это особый тип постов с типом revision. В таблице wp_posts они имеют поле post_type = 'revision'. Каждая ревизия связана с основным постом через поле post_parent, которое содержит ID оригинального поста.
Для удаления ревизий достаточно удалить все записи с post_type = 'revision'. Однако для безопасности и точности лучше удалять ревизии, относящиеся только к нужным постам.
Пример PHP функции для удаления старых ревизий
Ниже пример функции wp24_delete_old_revisions(), которая удаляет все ревизии без ограничений. Её можно добавить в файл functions.php вашей темы или в отдельный плагин.
function wp24_delete_old_revisions() {
global $wpdb;
// Удаляем все ревизии из таблицы wp_posts
$revisions = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision'");
if (empty($revisions)) {
return 'Ревизий для удаления не найдено.';
}
foreach ($revisions as $revision_id) {
wp_delete_post($revision_id, true); // true для полного удаления
}
return count($revisions) . ' ревизий успешно удалены.';
}
Вы можете вызвать эту функцию через админский хук, либо через WP-CLI, либо временно добавить вызов в functions.php для однократного удаления.
Добавление вызова функции через WP-CLI
Если у вас есть доступ к WP-CLI, можно выполнить удаление так:
wp eval 'echo wp24_delete_old_revisions();'
Как ограничить количество ревизий в WordPress
Чтобы в будущем не накапливалось слишком много ревизий, можно ограничить их количество через файл wp-config.php. Добавьте туда строку:
define('WP_POST_REVISIONS', 5); // сохранять максимум 5 ревизий
Это позволит WordPress автоматически удалять самые старые ревизии при сохранении новых.
Использование плагинов для управления ревизиями
Если вы не хотите писать код, для управления ревизиями хорошо подойдут плагины:
- WP-Optimize — популярный плагин для оптимизации базы, включая очистку ревизий.
- Revision Control — позволяет ограничивать количество ревизий для каждого типа постов.
Однако, если вам нужен точный контроль и автоматизация без дополнительных плагинов, использование собственного PHP кода — лучший вариант.
Рекомендации по безопасности и бэкапу перед удалением ревизий
Перед удалением ревизий обязательно сделайте резервную копию базы данных. В случае ошибок вы сможете восстановить данные. Для создания бэкапа используйте плагины, например, WPShop Backup, или инструменты хостинга.
Также не запускайте массовое удаление на живом сайте без тестирования — сначала попробуйте на локальной копии или тестовом окружении.
Автоматизация удаления старых ревизий по расписанию
Для автоматической очистки ревизий можно добавить WP-Cron задачу, которая будет запускать функцию удаления регулярно. Пример:
function wp24_schedule_revision_cleanup() {
if (!wp_next_scheduled('wp24_revision_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wp24_revision_cleanup_hook');
}
}
add_action('wp', 'wp24_schedule_revision_cleanup');
add_action('wp24_revision_cleanup_hook', 'wp24_delete_old_revisions');
Это позволит ежедневно удалять все накопленные ревизии, поддерживая базу данных в чистоте.