Оптимизация базы данных 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, который также содержит инструменты для оптимизации базы и настройки сайта.