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

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

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

Готовые плагины, такие как WP-Optimize или Advanced Database Cleaner, отлично справляются со своей задачей, но иногда они слишком громоздкие или включают функции, которые вам не нужны. Создав собственный плагин, вы получите инструмент, который:

  • Выполняет только необходимые операции.
  • Имеет понятный и кастомизируемый код.
  • Не нагружает сайт лишним функционалом.

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

Основные задачи плагина оптимизации базы данных WordPress

При создании плагина следует сконцентрироваться на следующих задачах:

  • Удаление мусорных ревизий записей.
  • Очистка автоматических черновиков и спам-комментариев.
  • Удаление неиспользуемых метаданных.
  • Оптимизация таблиц базы данных MySQL для уменьшения фрагментации.

Рассмотрим, как реализовать каждую из этих функций на практике.

Создание структуры плагина и подключение хуков

Создайте папку wpstuff-db-optimizer в wp-content/plugins, внутри создайте файл wpstuff-db-optimizer.php со следующим содержимым:

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

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

class WPStuff_DB_Optimizer {
    public function __construct() {
        add_action('admin_menu', array($this, 'wpstuff_add_admin_page'));
        add_action('admin_post_wpstuff_optimize_db', array($this, 'wpstuff_handle_optimization'));
    }

    public function wpstuff_add_admin_page() {
        add_management_page('Оптимизация БД WPStuff', 'Оптимизация БД WPStuff', 'manage_options', 'wpstuff-db-optimizer', array($this, 'wpstuff_admin_page'));
    }

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

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

        check_admin_referer(); // Защита от CSRF

        $this->wpstuff_delete_post_revisions();
        $this->wpstuff_delete_auto_drafts();
        $this->wpstuff_delete_spam_comments();
        $this->wpstuff_optimize_tables();

        wp_redirect(admin_url('tools.php?page=wpstuff-db-optimizer&optimized=1'));
        exit;
    }

    private function wpstuff_delete_post_revisions() {
        global $wpdb;
        $count = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
        add_action('admin_notices', function() use ($count) {
            echo "<div class='notice notice-success is-dismissible'>Удалено ревизий: $count</div>";
        });
    }

    private function wpstuff_delete_auto_drafts() {
        global $wpdb;
        $count = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_status = 'auto-draft'");
        add_action('admin_notices', function() use ($count) {
            echo "<div class='notice notice-success is-dismissible'>Удалено автоматических черновиков: $count</div>";
        });
    }

    private function wpstuff_delete_spam_comments() {
        global $wpdb;
        $count = $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'");
        add_action('admin_notices', function() use ($count) {
            echo "<div class='notice notice-success is-dismissible'>Удалено спам-комментариев: $count</div>";
        });
    }

    private function wpstuff_optimize_tables() {
        global $wpdb;
        $tables = $wpdb->get_col("SHOW TABLES LIKE '{$wpdb->prefix}%'");
        foreach ($tables as $table) {
            $wpdb->query("OPTIMIZE TABLE $table");
        }
        add_action('admin_notices', function() {
            echo "<div class='notice notice-success is-dismissible'>Оптимизация таблиц выполнена</div>";
        });
    }
}

new WPStuff_DB_Optimizer();

Удаление ревизий, автоматических черновиков и спама: как это работает

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

В нашем плагине функции wpstuff_delete_post_revisions, wpstuff_delete_auto_drafts и wpstuff_delete_spam_comments удаляют эти данные с помощью SQL-запросов через объект $wpdb. Это эффективно и быстро.

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

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

Со временем таблицы MySQL могут фрагментироваться, что замедляет работу запросов. Команда OPTIMIZE TABLE устраняет фрагментацию, освобождает пространство и улучшает производительность.

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

Как запустить оптимизацию автоматически по расписанию

Чтобы не запускать оптимизацию вручную, можно добавить cron-задачу WordPress:

add_action('wpstuff_daily_optimization_event', 'wpstuff_run_daily_optimization');

function wpstuff_run_daily_optimization() {
    $optimizer = new WPStuff_DB_Optimizer();
    $optimizer->wpstuff_delete_post_revisions();
    $optimizer->wpstuff_delete_auto_drafts();
    $optimizer->wpstuff_delete_spam_comments();
    $optimizer->wpstuff_optimize_tables();
}

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

Этот код запускает оптимизацию ежедневно. Не забудьте добавить проверку прав и логирование в реальном проекте.

Заключение и рекомендации

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

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

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

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

Автоматическое создание копий постов в WordPress
26.12.2025
Как автоматизировать удаление спама в комментариях WordPress
06.12.2025
Как добавить пользовательское поле в REST API WordPress
21.01.2026
Оптимизация браузерных исключений ошибок WordPress
20.05.2025
Как создать автоматический мультиязычный сайт на WordPress без использования полиглотов
24.01.2026