В процессе активной работы с сайтом на WordPress в базе данных со временем накапливается большое количество автосохраняемых черновиков и устаревших ревизий постов. Это негативно сказывается на производительности сайта и увеличивает нагрузку на сервер. В этой статье подробно рассмотрим, как автоматически удалять старые автосохраняемые черновики, используя как готовые плагины, так и собственные решения с примерами кода.
Почему важно удалять старые черновики и ревизии
WordPress по умолчанию сохраняет автосохранения и ревизии ваших записей, чтобы вы могли восстановить данные после сбоев или случайных удалений. Однако с течением времени эти данные накапливаются и начинают занимать много места в базе данных, что приводит к:
- Замедлению работы административной панели из-за большого объема данных.
- Увеличению времени резервного копирования сайта.
- Росту размера базы данных и, как следствие, стоимости хостинга при использовании платных тарифов.
Удаление старых черновиков и ревизий — важный шаг для оптимизации сайта.
Использование плагинов для автоматической очистки базы
Существует несколько популярных плагинов, которые позволяют автоматизировать процесс удаления старых черновиков и ревизий. Рассмотрим два из них:
1. WP-Optimize
Этот плагин не только удаляет ревизии и автосохранения, но и оптимизирует таблицы базы данных. Для удаления старых черновиков достаточно активировать функцию очистки и настроить расписание.
Преимущества:
- Автоматическая очистка по расписанию.
- Оптимизация таблиц базы данных.
- Простая настройка через админку.
2. Advanced Database Cleaner
Позволяет детально управлять удалением ревизий, автосохранений, спама и мусорных комментариев. Можно настроить удаление данных старше определенного срока.
Преимущества:
- Гибкие настройки удаления.
- Возможность планирования задач.
- Отдельная очистка для разных типов данных.
Как написать собственный код для удаления старых черновиков
Если вы предпочитаете не использовать плагины, можно реализовать удаление устаревших черновиков и ревизий с помощью пользовательской функции, подключенной к WP-Cron. Рассмотрим пример.
Пример функции для удаления автосохраненных черновиков старше 30 дней
function wpfaq_delete_old_autosaves() {
global $wpdb;
$days = 30;
$cutoff_date = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$autosaves = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' AND post_modified < %s",
$cutoff_date
));
foreach ($autosaves as $post_id) {
wp_delete_post($post_id, true);
}
}
// Регистрируем событие WP-Cron для ежедневного запуска
if (!wp_next_scheduled('wpfaq_daily_autosave_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpfaq_daily_autosave_cleanup');
}
add_action('wpfaq_daily_autosave_cleanup', 'wpfaq_delete_old_autosaves');
Данная функция получает ID всех ревизий, которые старше 30 дней, и удаляет их без возможности восстановления.
Расширение функции: удаление черновиков (post_status = 'draft')
Если необходимо удалять не только ревизии, но и старые черновики, можно добавить в запрос условие по статусу:
function wpfaq_delete_old_drafts_and_autosaves() {
global $wpdb;
$days = 30;
$cutoff_date = date('Y-m-d H:i:s', strtotime("-{$days} days"));
$old_posts = $wpdb->get_col($wpdb->prepare(
"SELECT ID FROM {$wpdb->posts} WHERE (post_status = 'draft' OR post_type = 'revision') AND post_modified < %s",
$cutoff_date
));
foreach ($old_posts as $post_id) {
wp_delete_post($post_id, true);
}
}
add_action('wpfaq_daily_autosave_cleanup', 'wpfaq_delete_old_drafts_and_autosaves');
Настройка частоты и уведомлений
WP-Cron запускается только при посещениях сайта, поэтому для сайтов с низкой посещаемостью стоит настроить системный cron на вызов wp-cron.php. Это обеспечит регулярное выполнение задач.
Также можно добавить логи и уведомления для контроля процесса очистки. Например, отправлять письмо администратору с количеством удалённых записей.
Советы по безопасности и тестированию
Перед внедрением автоматического удаления старых черновиков обязательно сделайте резервную копию базы данных. Рекомендуется сначала запускать функцию в тестовом режиме, выводя список удаляемых ID через error_log или на экран, чтобы убедиться в корректности выборки.
Также не удаляйте данные без надобности — настройте оптимальный период хранения (например, 30 дней), чтобы не потерять важные данные.
Заключение
Оптимизация базы данных WordPress за счёт удаления старых автосохраняемых черновиков и ревизий — простой и эффективный способ ускорить работу сайта и снизить нагрузку на сервер. Вы можете использовать готовые плагины, такие как WP-Optimize или Advanced Database Cleaner, либо написать собственное решение с использованием приведённого примера кода.