wpcorp.ru wordpress WP Corp

Как сделать автоматическую очистку базы данных WordPress

База данных WordPress со временем может разрастаться из-за накопления ревизий постов, спама в комментариях, временных опций и других ненужных данных. Это замедляет работу сайта и увеличивает время резервного копирования. В этой статье мы подробно разберём, как сделать автоматическую очистку базы данных WordPress, чтобы поддерживать её в оптимальном состоянии.

Почему важна регулярная очистка базы данных WordPress

WordPress активно использует базу данных для хранения контента и настроек. При создании и редактировании записей WordPress сохраняет ревизии — копии постов, которые можно восстановить при необходимости. Также появляются устаревшие транзиенты, спам-комментарии, мусор и автосохранения. Если их не удалять, база становится громоздкой, и запросы к ней замедляются.

Регулярная очистка:

  • Ускоряет работу сайта;
  • Уменьшает размер базы данных, что экономит место на сервере;
  • Снижает нагрузку на сервер при резервном копировании;
  • Поддерживает порядок в данных и снижает вероятность конфликтов.

Основные методы автоматической очистки базы данных

Существует несколько подходов к автоматизации очистки:

  1. Использование плагинов для автоматической оптимизации;
  2. Создание собственного решения с использованием WP-Cron для регулярных задач;
  3. Настройка очистки через серверные cron-задачи;
  4. Комбинация плагинов и собственного кода для гибкости.

Плагины для автоматической очистки базы данных

Для тех, кто не хочет писать код, есть готовые решения:

  • WP-Optimize — популярный плагин с функцией автоматической очистки и оптимизации базы данных. Позволяет удалять ревизии, спам, мусор, транзиенты, а также оптимизировать таблицы.
  • Advanced Database Cleaner — позволяет планировать очистку, удалять устаревшие данные и управлять задачами WP-Cron.
  • Clearfy Pro — плагин с инструментами оптимизации, включая очистку базы и отключение лишних функций для ускорения сайта.

Эти плагины позволяют настроить периодическую очистку без вмешательства разработчика, что удобно для большинства сайтов.

Создание собственного решения с WP-Cron

Если вы хотите контролировать процесс и оптимизировать очистку под свои нужды, можно написать функцию и задать её запуск по расписанию через WP-Cron — внутренний механизм WordPress для планирования задач.

Пример функции для удаления ревизий и устаревших транзиентов:

function wpcorp_clean_database() {
    global $wpdb;

    // Удаляем ревизии
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");

    // Удаляем устаревшие транзиенты
    $wpdb->query(
        "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%'"
    );
}

// Регистрируем событие при активации темы или плагина
function wpcorp_schedule_database_cleanup() {
    if (!wp_next_scheduled('wpcorp_database_cleanup_hook')) {
        wp_schedule_event(time(), 'daily', 'wpcorp_database_cleanup_hook');
    }
}
add_action('wp', 'wpcorp_schedule_database_cleanup');

// Привязываем функцию к событию
add_action('wpcorp_database_cleanup_hook', 'wpcorp_clean_database');

Этот код удаляет все ревизии и транзиенты один раз в сутки. Вы можете расширить его, добавив удаление спама, мусорных комментариев и других устаревших данных.

Расширение функции очистки — удаление спама и мусорных комментариев

Для более глубокой очистки базы можно добавить удаление спам-комментариев и комментариев в корзине:

function wpcorp_clean_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('wpcorp_database_cleanup_hook', 'wpcorp_clean_comments');

После добавления этой функции вместе с основной очисткой вы получите более чистую базу.

Оптимизация таблиц базы данных

Удаление данных освобождает место, но не всегда уменьшает размер таблиц на диске. Для этого нужно оптимизировать таблицы:

function wpcorp_optimize_tables() {
    global $wpdb;

    $tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
    foreach ($tables as $table) {
        $wpdb->query("OPTIMIZE TABLE {$table[0]}");
    }
}
add_action('wpcorp_database_cleanup_hook', 'wpcorp_optimize_tables');

Эту функцию тоже можно привязать к ежедневному событию WP-Cron.

Запуск WP-Cron на сервере для надёжности

По умолчанию WP-Cron запускается при посещении сайта, что не всегда надёжно, особенно при низкой посещаемости. Лучше настроить системный cron на сервере, который будет запускать WP-Cron по расписанию:

* * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Так вы гарантируете, что задачи очистки будут выполняться регулярно и вовремя.

Резюме и рекомендации

Автоматическая очистка базы данных — необходимая часть поддержки сайта на WordPress. Для большинства проектов достаточно плагинов, например, Clearfy Pro, который умеет автоматически удалять мусор и оптимизировать базу.

Если нужна гибкость и контроль, используйте WP-Cron с собственными функциями на основе примеров выше. Не забывайте также оптимизировать таблицы и при необходимости настраивать серверный cron для стабильности.

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

×
Оптимизируй свой сайт!

Скидка -15% на премиум плагин Clearfy Pro

Купить плагин сейчас ⋙