Автоматические черновики — это промежуточные версии записей, которые WordPress сохраняет для предотвращения потери данных при редактировании. Однако со временем такие автосохранения могут накапливаться и занимать место в базе данных, замедляя работу сайта. В этой статье подробно рассмотрим, как безопасно и эффективно удалить автоматические черновики (автосохранения) в WordPress с помощью кода.
Что такое автоматические черновики и зачем их удалять
Когда вы редактируете запись, WordPress периодически сохраняет её текущую версию как автосохранение. Это позволяет восстановить данные при сбое или закрытии браузера. Такие автосохранения хранятся в базе данных как отдельные записи с типом post_type = 'revision'. Со временем их количество может значительно увеличиться, особенно на активных сайтах с большим количеством контента.
Удаление устаревших автоматических черновиков поможет:
- Снизить нагрузку на базу данных;
- Уменьшить размер резервных копий;
- Повысить скорость работы сайта;
- Упростить управление контентом.
Важно не удалять сами ревизии, которые могут быть полезны для восстановления, а именно именно автосохранения, которые создаются автоматически и часто не нужны.
Как определить автоматические черновики в базе данных
Все автоматические черновики хранятся в таблице wp_posts со следующими критериями:
post_type = 'revision'— тип записи ревизия;post_status = 'inherit'— статус наследуемый от родительской записи;- созданы автоматически, а не вручную (это можно определить по дате и другим параметрам).
Однако WordPress не отличает автоматические автосохранения от ревизий, созданных вручную, напрямую в базе. Поэтому мы можем ориентироваться на дату и время создания, чтобы удалить только устаревшие автосохранения.
Удаление автоматических черновиков через WPINC:delete_autosaves()
Для удобства создадим функцию с префиксом wpinc, которая удалит автоматические черновики старше определённого времени. Например, удалять автосохранения старше 7 дней.
function wpinc_delete_autosaves( $days = 7 ) {
global $wpdb;
$date_threshold = date( 'Y-m-d H:i:s', strtotime( "-{$days} days" ) );
// Получаем ID автоматических черновиков старше порога
$autosaves = $wpdb->get_col( $wpdb->prepare(
"SELECT ID FROM {$wpdb->posts}
WHERE post_type = 'revision'
AND post_modified < %s",
$date_threshold
) );
if ( empty( $autosaves ) ) {
return 0;
}
foreach ( $autosaves as $autosave_id ) {
wp_delete_post( $autosave_id, true );
}
return count( $autosaves );
}Эта функция обращается напрямую к базе данных и выбирает все ревизии, созданные раньше 7 дней назад, затем удаляет их полностью.
Как запустить функцию удаления по расписанию
Чтобы автоматизировать удаление, можно добавить крон-задачу WordPress. Пример кода для регистрации события:
function wpinc_schedule_autosave_cleanup() {
if ( ! wp_next_scheduled( 'wpinc_autosave_cleanup_event' ) ) {
wp_schedule_event( time(), 'daily', 'wpinc_autosave_cleanup_event' );
}
}
add_action( 'wp', 'wpinc_schedule_autosave_cleanup' );
add_action( 'wpinc_autosave_cleanup_event', function() {
$deleted = wpinc_delete_autosaves( 7 );
if ( $deleted ) {
error_log( "WPINC: Deleted {$deleted} autosave revisions." );
}
} );Этот код настроит ежедневный запуск функции удаления автосохранений старше 7 дней. Также он пишет в лог количество удалённых записей, что полезно для отладки.
Плагины для управления ревизиями и автосохранениями
Если вы не хотите писать код самостоятельно, можно использовать плагины, которые помогут контролировать ревизии и автосохранения:
- WP Rocket — оптимизация и очистка базы данных, в том числе удаление ревизий.
- WP-Optimize — комплексная оптимизация базы, удаление ревизий и временных данных.
- Revision Control — ограничение количества ревизий и управление ими.
Также можно использовать Clearfy Pro для удобной оптимизации и очистки базы данных с настройками удаления автосохранений и ревизий.
Практические рекомендации по работе с автосохранениями
Несколько советов для работы с автосохранениями и ревизиями в WordPress:
- Регулярно очищайте устаревшие автосохранения, чтобы не перегружать базу данных.
- Ограничьте количество ревизий через константу
WP_POST_REVISIONSвwp-config.phpнапример,define('WP_POST_REVISIONS', 5);. - Используйте планировщик задач для автоматической очистки старых ревизий и автосохранений.
- Перед удалением всегда делайте резервную копию базы данных.
Удаление автоматических черновиков — простой и эффективный способ оптимизировать работу сайта и уменьшить размер базы данных без вреда для контента.