База данных WordPress со временем накапливает множество ненужных записей: ревизии постов, автосохранения, спам-комментарии, временные опции и другие «мусорные» данные. Это замедляет работу сайта и увеличивает размер бэкапов. В этой статье разберём, как автоматизировать очистку базы данных, используя кастомные функции и плагины, а также как настроить регулярное выполнение очистки.
Почему важна регулярная очистка базы данных WordPress
WordPress по умолчанию сохраняет ревизии каждого поста, что позволяет откатиться к предыдущим версиям. Но если не ограничивать количество ревизий, их число может стремительно расти. Аналогично, в базе копится спам и временные записи, которые не удаляются автоматически. Всё это приводит к:
- Увеличению размера базы данных;
- Замедлению запросов и загрузки страниц;
- Увеличению времени создания и восстановления бэкапов;
- Повышенному риску ошибок при обновлениях.
Регулярная очистка помогает поддерживать базу в оптимальном состоянии, особенно на крупных и активно обновляемых сайтах.
Основные типы мусорных данных в базе данных WordPress
Чтобы грамотно автоматизировать очистку, нужно понимать, какие данные считать мусорными:
- Ревизии (post revisions) — предыдущие версии записей и страниц.
- Автосохранения (autosaves) — временные черновики, создаваемые при редактировании.
- Спам и корзина комментариев — нежелательные отзывы и удалённые комментарии.
- Временные опции (transients) — кэшированные данные с временем жизни.
- Мусорные записи в метах и опциях — устаревшие или неиспользуемые данные.
Все эти данные можно безопасно удалять, чтобы разгрузить базу.
Как ограничить количество ревизий и удалять старые автоматически
Для начала стоит ограничить число ревизий, которые WordPress хранит для каждой записи. Это делается через wp-config.php:
define('WP_POST_REVISIONS', 5); // хранить максимум 5 ревизий для каждого постаЭто ограничит рост количества ревизий. Но чтобы очистить уже накопленные ревизии, можно написать функцию, которая удалит все старые ревизии:
function wplog_delete_old_revisions() {
global $wpdb;
$wpdb->query("DELETE FROM $wpdb->posts WHERE post_type = 'revision'");
}
add_action('wp_scheduled_delete', 'wplog_delete_old_revisions');Эта функция удалит все ревизии при срабатывании стандартного события wp_scheduled_delete, которое вызывается раз в день. Можно также запускать её вручную для разовой очистки.
Удаление автосохранений
Автосохранения — это черновики, которые WordPress сохраняет автоматически. Они тоже занимают место, но обычно старые автосохранения удаляются автоматически. Если хотите, можно очистить их через запрос:
function wplog_delete_autosaves() {
global $wpdb;
$wpdb->query("DELETE FROM $wpdb->posts WHERE post_type = 'autosave'");
}
add_action('wp_scheduled_delete', 'wplog_delete_autosaves');Автоматическая очистка спама и мусорных комментариев
Спам-комментарии и комментарии из корзины тоже нужно регулярно удалять для оптимизации базы. WordPress имеет встроенную функцию wp_delete_comment(), но для массового удаления можно использовать следующий код:
function wplog_clean_spam_and_trash_comments() {
global $wpdb;
$wpdb->query("DELETE FROM $wpdb->comments WHERE comment_approved = 'spam'");
$wpdb->query("DELETE FROM $wpdb->comments WHERE comment_approved = 'trash'");
}
add_action('wp_scheduled_delete', 'wplog_clean_spam_and_trash_comments');Эта функция удалит все спам и корзину комментариев при ежедневной очистке.
Удаление устаревших временных опций (transients)
Временные опции (transients) — это кэшированные данные с ограниченным сроком жизни. Иногда они не удаляются автоматически (например, из-за ошибок плагинов). Чтобы очистить их вручную, можно использовать запрос:
function wplog_delete_expired_transients() {
global $wpdb;
$time = time();
$wpdb->query(
$wpdb->prepare(
"DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%' AND option_id IN (
SELECT option_id FROM $wpdb->options AS o2 WHERE option_name LIKE '_transient_timeout_%' AND option_value < %d
)",
$time
)
);
}
add_action('wp_scheduled_delete', 'wplog_delete_expired_transients');<Эта функция удалит все просроченные транзиенты из базы.
Настройка автоматического запуска очистки с WP Cron
Чтобы автоматизировать очистку, нужно зарегистрировать и запланировать событие в WordPress Cron:
function wplog_schedule_database_cleanup() {
if (!wp_next_scheduled('wplog_database_cleanup_event')) {
wp_schedule_event(time(), 'daily', 'wplog_database_cleanup_event');
}
}
add_action('wp', 'wplog_schedule_database_cleanup');
add_action('wplog_database_cleanup_event', 'wplog_run_database_cleanup');
function wplog_run_database_cleanup() {
wplog_delete_old_revisions();
wplog_delete_autosaves();
wplog_clean_spam_and_trash_comments();
wplog_delete_expired_transients();
}
// Для отмены расписания вызовите wp_clear_scheduled_hook('wplog_database_cleanup_event');Таким образом, очистка будет запускаться ежедневно без вашего участия.
Полезные плагины для автоматизации очистки базы данных
Если не хотите писать код, можно использовать готовые плагины. Вот несколько проверенных решений:
- Clearfy Pro — оптимизация и очистка базы, кэш, отключение ненужных функций.
- WP-Optimize — популярный плагин для очистки базы и оптимизации таблиц.
- WP-DBManager — управление базой, оптимизация, бэкапы и очистка.
Используйте плагины с осторожностью и всегда делайте резервные копии перед массовыми очистками.
Дополнительные советы по поддержанию базы данных в порядке
Помимо удаления мусорных записей, рекомендуем:
- Ограничить количество ревизий через
wp-config.php. - Регулярно обновлять WordPress, темы и плагины для исправления багов.
- Проверять настройки плагинов, которые создают много временных данных.
- Настроить мониторинг производительности и базы данных.
Такой комплексный подход позволит избежать накопления лишних данных и сохранить скорость сайта.