В процессе работы сайта на WordPress база данных постепенно засоряется лишними данными: автосохранениями, ревизиями, временными опциями, неиспользуемыми мета-полями и транзиентами. Чтобы поддерживать производительность сайта и не перегружать сервер, полезно настроить автоматическую очистку базы данных по расписанию, избавляясь от ненужных данных без вашего участия.
Почему важна регулярная очистка базы данных WordPress
Со временем в таблицах базы данных накапливаются:
- Ревизии постов и страниц, которые занимают место и замедляют запросы.
- Автосохранения, которые не всегда нужны после публикации.
- Временные опции и транзиенты, которые устарели и не удалились автоматически.
- Неиспользуемые мета-поля, создающие лишний шум и нагрузку.
Если база данных становится слишком большой, это может привести к замедлению сайта, увеличению времени отклика и даже ошибкам при работе с данными. Регулярное удаление мусора помогает сохранить базу чистой и адаптированной под текущие задачи.
Как создать собственную функцию очистки базы данных WordPress
Для автоматизации очистки мы создадим PHP-функцию, которая удаляет ревизии, автосохранения и устаревшие транзиенты. Эту функцию можно запускать по расписанию с помощью WP-Cron.
Пример функции очистки
function wpelement_clean_database() {
global $wpdb;
// Удаляем ревизии
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
// Удаляем автосохранения
$wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'autosave'");
// Удаляем устаревшие транзиенты
$transients = $wpdb->get_col(
"SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_%'"
);
foreach ($transients as $transient) {
$transient_name = str_replace('_transient_', '', $transient);
if (get_transient($transient_name) === false) {
delete_option($transient);
delete_option(str_replace('_transient_', '_transient_timeout_', $transient));
}
}
// Дополнительно можно добавить удаление неиспользуемых мета-полей
}
Эта функция использует объект $wpdb для прямых запросов к базе, что эффективно и быстро. Важно понимать, что операции с базой требуют аккуратности — всегда делайте резервные копии перед запуском таких функций.
Настройка WP-Cron для автоматического запуска функции
Чтобы функция очищала базу регулярно, например, раз в неделю, подключим её к собственному событию WP-Cron.
Добавление расписания и хука
add_filter('cron_schedules', 'wpelement_add_weekly_cron_schedule');
function wpelement_add_weekly_cron_schedule($schedules) {
if (!isset($schedules['weekly'])) {
$schedules['weekly'] = [
'interval' => 604800, // 7 дней в секундах
'display' => __('Once Weekly')
];
}
return $schedules;
}
if (!wp_next_scheduled('wpelement_weekly_db_cleanup')) {
wp_schedule_event(time(), 'weekly', 'wpelement_weekly_db_cleanup');
}
add_action('wpelement_weekly_db_cleanup', 'wpelement_clean_database');
Этот код добавит новое расписание «weekly» и запланирует запуск вашей функции каждую неделю. WP-Cron будет запускать её самостоятельно, если на сайт заходят пользователи.
Плагины для автоматической очистки базы данных
Если вы предпочитаете готовые решения, можно использовать плагины с расширенными возможностями очистки и оптимизации:
- Clearfy Pro — мощный инструмент для оптимизации и очистки базы, включая удаление ревизий, автосохранений, транзиентов и мусорных данных.
- WPRemark — содержит опции для удаления неактивных мета-данных и оптимизации таблиц.
Плагины подходят, если вы не хотите писать код или хотите получить дополнительные функции, например, автоматическую оптимизацию таблиц и отчёты.
Расширение функции: удаление неиспользуемых мета-полей
Часто в базе остаются мета-поля, которые больше не нужны — например, после удаления плагинов или тем. Их можно очистить, чтобы уменьшить размер таблицы wp_postmeta.
Пример удаления мета-полей по ключу
function wpelement_delete_unused_postmeta($meta_key) {
global $wpdb;
$wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->postmeta} WHERE meta_key = %s",
$meta_key
));
}
Вызывайте эту функцию с конкретным ключом мета-поля, чтобы удалить все записи с ним. Можно создать интерфейс в админке или запускать вручную через WP-CLI.
Резюме по безопасности и производительности
Перед запуском автоматической очистки:
- Обязательно создайте резервную копию базы данных.
- Проверяйте работу функции сначала на тестовом сайте.
- Не удаляйте данные, если не уверены, что они не нужны.
- Для больших сайтов рекомендуется запускать очистку в ночное время, чтобы не влиять на пользователей.
Такой подход обеспечит стабильную работу сайта и поддержит базу данных в оптимальном состоянии.