Автосохраняемые черновики (autosaves) в WordPress — это полезная функция, которая защищает контент от потери при неожиданном закрытии браузера или сбое. Однако со временем эти автосохраняемые версии накапливаются в базе данных, что может замедлять работу сайта и увеличивать размер базы данных. В этой статье мы подробно разберем, как автоматически удалять старые автосохраняемые черновики, оптимизировать базу данных и обеспечить стабильную работу вашего сайта.
Что такое автосохраняемые черновики и зачем их удалять?
Автосохранение — это механизм, который WordPress запускает каждые несколько секунд при редактировании записи или страницы. Он создает временную версию записи, чтобы предотвратить потерю данных. Однако эти версии не удаляются автоматически, если пользователь не публикует или не обновляет запись.
В результате в таблице wp_posts с типом revision копятся тысячи автосохраняемых записей, которые не несут пользы и замедляют запросы к базе данных. Особенно это заметно на больших сайтах с большим количеством редактируемого контента.
Удаление старых автосохраняемых черновиков помогает:
- Сократить размер базы данных.
- Ускорить запросы к базе данных.
- Облегчить резервное копирование и восстановление.
Как выявить автосохраняемые черновики в базе данных WordPress
Автосохраняемые черновики — это записи с типом revision и статусом inherit. Обычно они связаны с родительской записью через поле post_parent. Отличить именно автосохранения от обычных ревизий можно по дате и контексту, поскольку автосохраняемые версии создаются часто и имеют маленький промежуток времени между собой.
Для базового анализа можно использовать следующий SQL-запрос, который покажет количество ревизий на сайте:
SELECT COUNT(*) FROM wp_posts WHERE post_type = 'revision';
Если количество ревизий очень большое, стоит задуматься об их очистке.
Автоматическое удаление старых автосохраняемых черновиков с помощью PHP-кода
Для автоматизации очистки можно добавить кастомную функцию в файл functions.php вашей темы или в отдельный плагин. Ниже пример функции, которая удаляет все автосохраняемые черновики старше 7 дней.
function wpfaq_delete_old_autosaves() {
global $wpdb;
$days = 7; // Срок хранения автосохраняемых черновиков
$date_threshold = date('Y-m-d H:i:s', strtotime("-{$days} days"));
// Удаляем автосохраняемые черновики
$deleted = $wpdb->query($wpdb->prepare(
"DELETE p FROM {$wpdb->posts} p
WHERE p.post_type = 'revision'
AND p.post_modified < %s
AND p.post_parent > 0
AND p.post_status = 'inherit'",
$date_threshold
));
return $deleted;
}
// Запускаем очистку по крону (раз в сутки)
add_action('wpfaq_daily_cleanup', 'wpfaq_delete_old_autosaves');
// Планируем событие при активации темы или плагина
if (!wp_next_scheduled('wpfaq_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpfaq_daily_cleanup');
}
В этом коде мы используем WP Cron для запуска очистки раз в сутки. Функция удаляет все ревизии старше 7 дней. Вы можете поменять значение $days под свои нужды.
Почему именно 7 дней?
7 дней — это компромисс между сохранением последних изменений и очисткой устаревших данных. Если вы работаете с очень часто обновляемым контентом, можно уменьшить этот период, например, до 3 дней.
Использование плагинов для управления автосохраняемыми черновиками
Если вы не хотите писать код, можете использовать готовые плагины для очистки ревизий и автосохранений. Вот несколько популярных решений:
- WP-Optimize — мощный плагин для очистки и оптимизации базы данных, включая удаление ревизий и автосохранений.
- Advanced Database Cleaner — позволяет удалять ревизии, автосохранения и другие неиспользуемые данные с возможностью расписания.
- Clearfy Pro — в платной версии есть расширенные возможности по управлению ревизиями и оптимизации базы, что поможет очистить автосохраняемые черновики.
Все эти плагины можно скачать на WPSHOP.RU, где есть подробные описания и инструкции по установке.
Советы по предотвращению накопления автосохраняемых черновиков
Помимо очистки, можно уменьшить частоту автосохранений, чтобы база не засорялась слишком быстро. Для этого добавьте в wp-config.php такую строку:
define('AUTOSAVE_INTERVAL', 300); // интервал автосохранения в секундах (300 = 5 минут)
По умолчанию интервал около 60 секунд, что слишком часто для многих сайтов.
Также можно полностью отключить ревизии, добавив в wp-config.php:
define('WP_POST_REVISIONS', false);
Но будьте осторожны — в этом случае вы не сможете откатиться к предыдущим версиям записи.
Выводы и рекомендации
Автоматическое удаление старых автосохраняемых черновиков помогает поддерживать базу данных WordPress в оптимальном состоянии. Рекомендуется:
- Использовать функцию автоматической очистки через WP Cron.
- Настроить разумный интервал автосохранения.
- При необходимости использовать плагины для удобного управления ревизиями.
- Регулярно делать резервные копии базы данных перед массовой очисткой.
Такой подход обеспечит стабильную и быструю работу вашего сайта без лишних нагрузок на базу данных.