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

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

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

Существует множество готовых решений для оптимизации базы, например, WP-Optimize, Advanced Database Cleaner и другие. Однако собственный плагин даёт гибкость и позволяет адаптировать функционал под конкретные нужды проекта.

Вы сможете:

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

Основные объекты для очистки в базе WordPress

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

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

Структура плагина для очистки базы данных WordPress

Начнём с создания простого плагина с базовой структурой. Создайте папку wpdigest-db-cleaner в каталоге wp-content/plugins и в ней файл wpdigest-db-cleaner.php с таким содержимым:

<?php
/**
 * Plugin Name: WPDigest DB Cleaner
 * Description: Простой плагин для очистки базы данных WordPress от мусорных данных.
 * Version: 1.0
 * Author: WPDigest
 */

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

// Основной класс плагина
class WPDigest_DB_Cleaner {
    public function __construct() {
        add_action( 'admin_menu', array( $this, 'wpdigest_add_admin_menu' ) );
        add_action( 'admin_post_wpdigest_clean_db', array( $this, 'wpdigest_handle_clean_request' ) );
    }

    public function wpdigest_add_admin_menu() {
        add_management_page(
            'Очистка базы данных',
            'Очистка базы данных',
            'manage_options',
            'wpdigest-db-cleaner',
            array( $this, 'wpdigest_admin_page' )
        );
    }

    public function wpdigest_admin_page() {
        ?>
        <div class="wrap">
            <h1>Очистка базы данных WordPress</h1>
            <p>Нажмите кнопку ниже, чтобы удалить ревизии, автосохранения, спам и мусорные комментарии, а также просроченные транзиенты.</p>
            <form method="post" action="admin-post.php">
                <input type="hidden" name="action" value="wpdigest_clean_db">
                <input type="submit" class="button button-primary" value="Очистить базу данных">
            </form>
        </div>
        <?php
    }

    public function wpdigest_handle_clean_request() {
        if ( ! current_user_can( 'manage_options' ) ) {
            wp_die( 'Недостаточно прав' );
        }

        check_admin_referer(); // Для безопасности можно добавить nonce, но для примера пропустим

        global $wpdb;

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

        // Удаляем автосохранения
        $autosaves_deleted = $wpdb->query( "DELETE FROM {$wpdb->posts} WHERE post_type = 'autosave'" );

        // Удаляем спам комментарии
        $spam_comments_deleted = $wpdb->query( "DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'" );

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

        // Удаляем просроченные транзиенты
        $transients_deleted = $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_value < UNIX_TIMESTAMP()" );

        wp_redirect( admin_url( 'tools.php?page=wpdigest-db-cleaner&cleaned=1' ) );
        exit;
    }
}

new WPDigest_DB_Cleaner();

Объяснение кода

Мы создали класс WPDigest_DB_Cleaner, который добавляет страницу в меню «Инструменты» в админке WordPress. На этой странице пользователь может запустить процесс очистки базы.

Обработчик формы выполняет SQL-запросы для удаления ревизий, автосохранений и комментариев со статусами «спам» и «мусор». Также удаляются старые транзиенты.

Обратите внимание: перед выполнением запросов стоит делать бэкап базы, а в продакшене добавить nonce и дополнительные проверки безопасности.

Расширяем функционал: удаление мусорных таблиц и оптимизация базы

Дополнительно можно добавить в плагин очистку остатков от удалённых плагинов — например, таблиц с префиксом или опций, связанных с плагинами. Для этого можно использовать SQL-запросы с проверкой существования таблиц.

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

public function wpdigest_optimize_tables() {
    global $wpdb;
    $tables = $wpdb->get_col( "SHOW TABLES LIKE '{$wpdb->prefix}%';" );
    foreach ( $tables as $table ) {
        $wpdb->query( "OPTIMIZE TABLE {$table}" );
    }
}

Эту функцию можно запускать по крону или после очистки базы.

Автоматизация очистки базы с помощью WP-Cron

Чтобы не запускать очистку вручную, добавим планировщик задач WP-Cron.

public function __construct() {
    add_action( 'admin_menu', array( $this, 'wpdigest_add_admin_menu' ) );
    add_action( 'admin_post_wpdigest_clean_db', array( $this, 'wpdigest_handle_clean_request' ) );
    add_action( 'wpdigest_daily_cleanup', array( $this, 'wpdigest_perform_cleanup' ) );

    if ( ! wp_next_scheduled( 'wpdigest_daily_cleanup' ) ) {
        wp_schedule_event( time(), 'daily', 'wpdigest_daily_cleanup' );
    }
}

public function wpdigest_perform_cleanup() {
    global $wpdb;
    $wpdb->query( "DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'" );
    $wpdb->query( "DELETE FROM {$wpdb->posts} WHERE post_type = 'autosave'" );
    $wpdb->query( "DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'" );
    $wpdb->query( "DELETE FROM {$wpdb->comments} WHERE comment_approved = 'trash'" );
    $wpdb->query( "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_value < UNIX_TIMESTAMP()" );
}

Так плагин будет ежедневно очищать базу без участия пользователя.

Альтернативные плагины и лучшие практики очистки базы данных

Если не хочется писать плагин самостоятельно, можно использовать:

  • WP-Optimize — популярный плагин с функцией очистки базы и кэширования;
  • Advanced Database Cleaner — позволяет выбрать, какие типы данных удалить;
  • Optimize Database after Deleting Revisions — легкий плагин для удаления ревизий и оптимизации таблиц.

Но всегда делайте резервные копии перед очисткой базы и тестируйте на тестовом сайте.

Заключение

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

Поддерживайте базу в чистоте — и ваш сайт будет работать быстрее и стабильнее.

Как автоматизировать удаление спам комментариев в WordPress
01.01.2026
Как использовать хуки для отложенного выполнения кода в WordPress
07.12.2025
Создание уникального отзывного блока в WordPress с AJAX
21.12.2025
WooCommerce: как установить лимит на количество товаров в корзине
17.04.2026
WooCommerce: как автоматически отключать возможность оформления заказа при отсутствии товара на складе
17.06.2026