В WordPress по умолчанию сохраняются ревизии каждого изменения поста, что позволяет откатиться к предыдущей версии. Однако со временем накопление большого числа ревизий замедляет работу сайта и увеличивает размер базы данных. В этой статье мы рассмотрим, как автоматизировать удаление старых ревизий с помощью WP-Cron, чтобы регулярно чистить базу данных без лишних плагинов.
Что такое ревизии и почему их стоит удалять
Ревизии — это сохранённые версии записи или страницы при её редактировании. WordPress хранит их по умолчанию, и со временем их количество может достигать сотен и даже тысяч, особенно на больших сайтах с активным контентом. Это приводит к:
- Увеличению размера таблиц wp_posts и wp_postmeta;
- Замедлению запросов к базе данных;
- Потере производительности и увеличению времени отклика сайта.
Удаление старых ревизий помогает поддерживать базу данных в оптимальном состоянии.
Использование WP-Cron для автоматизации очистки ревизий
WP-Cron — встроенный в WordPress планировщик задач, который позволяет запускать функции по расписанию. Мы создадим задачу, которая будет запускаться, например, раз в неделю и удалять все ревизии старше определённого срока.
Создание функции для удаления старых ревизий
Добавьте следующий код в файл functions.php вашей темы или лучше в отдельный плагин, чтобы не потерять изменения при обновлении темы:
function wpcontent_delete_old_revisions() {
global $wpdb;
// Удаляем ревизии старше 30 дней
$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_modified < %s",
$date
));
if (!empty($revisions)) {
foreach ($revisions as $revision_id) {
wp_delete_post($revision_id, true);
}
}
}
Эта функция выбирает все ревизии, изменённые более 30 дней назад, и удаляет их без возможности восстановления.
Регистрация задачи WP-Cron
Теперь нужно зарегистрировать задачу, которая будет вызывать эту функцию регулярно. Добавьте в functions.php следующий код:
function wpcontent_schedule_revision_cleanup() {
if (!wp_next_scheduled('wpcontent_revision_cleanup_hook')) {
wp_schedule_event(time(), 'weekly', 'wpcontent_revision_cleanup_hook');
}
}
add_action('wp', 'wpcontent_schedule_revision_cleanup');
add_action('wpcontent_revision_cleanup_hook', 'wpcontent_delete_old_revisions');
Этот код проверяет, запланировано ли уже событие с хук-именем wpcontent_revision_cleanup_hook, и если нет — ставит его на еженедельный запуск. При срабатывании вызывается функция удаления ревизий.
Примеры плагинов для управления ревизиями
Если вы предпочитаете готовые решения, можно использовать плагины с похожим функционалом:
- WP-Optimize — плагин для оптимизации базы данных, позволяет удалять ревизии и другие мусорные данные.
- Advanced Database Cleaner — расширенные возможности для очистки и управления базой данных, включая ревизии.
- Clearfy Pro — многофункциональный плагин оптимизации, который также помогает управлять ревизиями и другими оптимизациями.
При использовании плагинов обратите внимание на настройки автоматизации, чтобы не выполнять очистку вручную.
Дополнительные рекомендации по оптимизации ревизий
Ограничение количества ревизий при сохранении
Чтобы не накапливать слишком много ревизий, можно ограничить их количество. Добавьте в wp-config.php следующую строку:
define('WP_POST_REVISIONS', 5); // сохранять максимум 5 ревизийЭто позволит хранить не более 5 ревизий для каждой записи, что снизит нагрузку на базу.
Отключение ревизий полностью
Если вы уверены, что ревизии не нужны, их можно отключить полностью. Для этого в wp-config.php добавьте:
define('WP_POST_REVISIONS', false);Однако это не рекомендуется на сайтах с активным редактированием, так как потеряется возможность отката.
Оптимизация базы данных после удаления ревизий
После массового удаления ревизий полезно оптимизировать таблицы базы данных для освобождения места и повышения производительности. Для этого можно воспользоваться SQL-запросом:
OPTIMIZE TABLE wp_posts;Или использовать плагины, такие как WP-Optimize, для автоматизации этого процесса.
Выводы и практические советы
Автоматизация удаления старых ревизий с помощью WP-Cron — эффективный метод поддерживать производительность WordPress без лишних плагинов. Код, приведённый выше, легко адаптируется под разные интервалы и условия. Если вы предпочитаете готовые решения, обратите внимание на плагины Clearfy Pro и WP-Optimize с поддержкой автоматической очистки.
Для скачивания Clearfy Pro и других полезных инструментов посетите официальный магазин WPSHOP.