Как создать простой плагин для автоматического очищения базы данных WordPress

Поддержание чистоты базы данных WordPress — важный аспект оптимизации производительности сайта. Со временем в базе накапливаются ревизии постов, мусорные комментарии, устаревшие опции и транзиенты, которые замедляют работу и увеличивают размер базы данных. Регулярное удаление этих данных помогает ускорить сайт и снизить нагрузку на сервер.

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

Ручная очистка базы требует постоянного контроля и регулярного выполнения процедур, что неудобно и часто забывается. Автоматизация процесса позволяет настроить регулярное удаление ненужных данных без вашего участия. Это минимизирует риски накопления «мусора» и поддерживает базу в оптимальном состоянии.

Кроме того, автоматизация снижает риск случайного удаления важных данных, так как процесс можно тщательно программировать и тестировать.

Основные типы данных для удаления

Для эффективной очистки базы данных обычно удаляют следующие элементы:

  • Ревизии постов — промежуточные сохранения изменений контента, которые могут быть многочисленными и не всегда нужны.
  • Мусорные и спам-комментарии — комментарии, отфильтрованные системой, но не удалённые.
  • Транзиенты — временные данные кэширования, которые могут устаревать.
  • Опции, связанные с временными плагинами — настройки удалённых плагинов, которые остаются в базе.

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

Далее рассмотрим, как написать плагин, который будет запускать очистку базы данных по расписанию. Мы используем встроенный WP-Cron для выполнения задачи раз в сутки.

Шаг 1. Создаем структуру плагина

В папке wp-content/plugins создайте папку wpkit-db-cleaner и файл wpkit-db-cleaner.php с таким кодом:

<?php
/**
 * Plugin Name: WPKit DB Cleaner
 * Description: Автоматическая очистка базы данных WordPress от ревизий, мусорных комментариев и транзиентов.
 * Version: 1.0
 * Author: WPKit
 */

// Защита от прямого доступа
if (!defined('ABSPATH')) {
    exit;
}

Шаг 2. Функция для очистки базы данных

Определим функцию wpkit_db_cleaner_run(), которая удалит ревизии, мусорные комментарии и транзиенты.

function wpkit_db_cleaner_run() {
    global $wpdb;
    // Удаление ревизий постов
    $revisions = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");

    // Удаление мусорных комментариев
    $comments = $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'trash'");

    // Удаление устаревших транзиентов
    $transients = $wpdb->query(
        "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'"
    );

    // Удаление просроченных транзиентов
    $now = time();
    $expired = $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < %d",
            $now
        )
    );

    return array(
        'revisions_deleted' => $revisions,
        'comments_deleted' => $comments,
        'transients_deleted' => $transients + $expired,
    );
}

Шаг 3. Планировщик задачи WP-Cron

Добавим крон-задачу, которая будет запускать очистку раз в сутки.

function wpkit_db_cleaner_schedule() {
    if (!wp_next_scheduled('wpkit_db_cleaner_cron')) {
        wp_schedule_event(time(), 'daily', 'wpkit_db_cleaner_cron');
    }
}
add_action('wp', 'wpkit_db_cleaner_schedule');

add_action('wpkit_db_cleaner_cron', 'wpkit_db_cleaner_cron_exec');

function wpkit_db_cleaner_cron_exec() {
    $results = wpkit_db_cleaner_run();
    // Для отладки можно сохранить результаты в лог
    if (defined('WP_DEBUG') && WP_DEBUG) {
        error_log('WPKit DB Cleaner: удалено ревизий: ' . $results['revisions_deleted']);
        error_log('WPKit DB Cleaner: удалено мусорных комментариев: ' . $results['comments_deleted']);
        error_log('WPKit DB Cleaner: удалено транзиентов: ' . $results['transients_deleted']);
    }
}

Шаг 4. Очистка при деактивации плагина

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

function wpkit_db_cleaner_deactivate() {
    wp_clear_scheduled_hook('wpkit_db_cleaner_cron');
}
register_deactivation_hook(__FILE__, 'wpkit_db_cleaner_deactivate');

Дополнительные рекомендации и улучшения

Вы можете расширить функционал плагина, добавив:

  • Админ-панель с настройками, чтобы выбирать, какие типы данных очищать.
  • Отправку email-уведомлений об успешном выполнении очистки.
  • Логирование в отдельный файл для отслеживания истории очисток.
  • Очистку других типов устаревших данных, например, опций удалённых плагинов.

Если вы предпочитаете готовые решения, обратите внимание на плагин Clearfy — он включает функции оптимизации и очистки базы, которые можно настроить под себя без программирования.

Заключение

Автоматическое очищение базы данных WordPress — простой, но эффективный способ поддерживать сайт быстрым и стабильным. Создание собственного плагина даст полный контроль над процессом и поможет избежать лишних нагрузок. Используйте пример из статьи как основу и адаптируйте его под свои нужды.

Как использовать хуки для оптимизации производительности WordPress
25.12.2025
Как сделать многоязычный сайт на WordPress с помощью Polylang
22.03.2026
WooCommerce: автоматическое изменение стоимости товаров при оплате с поддержкой купонов
10.07.2026
WooCommerce: как исключить товары с определёнными атрибутами из корзины
10.05.2026
Как создать индивидуальные типы постов в WordPress с поддержкой метаполей
05.03.2026