Настройка автоматической очистки базы данных WordPress по расписанию

В процессе работы сайта на 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.

Резюме по безопасности и производительности

Перед запуском автоматической очистки:

  • Обязательно создайте резервную копию базы данных.
  • Проверяйте работу функции сначала на тестовом сайте.
  • Не удаляйте данные, если не уверены, что они не нужны.
  • Для больших сайтов рекомендуется запускать очистку в ночное время, чтобы не влиять на пользователей.

Такой подход обеспечит стабильную работу сайта и поддержит базу данных в оптимальном состоянии.

Как создать автоматический импорт постов в WordPress из внешнего источника
25.12.2025
Как автоматически отключить отзывы на отдельных страницах WooCommerce
15.05.2026
Как удалить пустые категории в WordPress
12.03.2026
Как создать автоматический импорт данных из Google Sheets в WordPress
04.02.2026
Как убрать замедление страниц WooCommerce при большом количестве товаров
22.04.2026