Оптимизация базы данных — важный аспект поддержания производительности WordPress-сайта. Со временем таблицы накапливают мусор: удалённые записи, ревизии, спам-комментарии и многое другое. В этой статье разберём, как создать собственный плагин, который автоматически очищает и оптимизирует базу данных, избавляя вас от ручной работы и помогая поддерживать сайт в отличном состоянии.
Почему нужна оптимизация базы данных в WordPress
При активной работе сайта в базе данных накапливаются:
- Ревизии постов и страниц;
- Автосохранения;
- Удалённые записи в корзине;
- Спам и мусорные комментарии;
- Транзиенты, которые устарели;
- Неиспользуемые метаданные.
Это всё увеличивает размер базы, замедляет запросы, что негативно сказывается на скорости загрузки и стабильности сайта. Оптимизация помогает удалить ненужные данные, сжать таблицы и улучшить общую производительность.
Обзор существующих решений и почему стоит сделать свой плагин
Существуют популярные плагины типа Clearfy, WP-Optimize и другие. Они функциональны и удобны, но иногда нужно более гибкое решение под конкретные задачи, либо хочется минималистичный плагин без излишних функций.
Создавая свой плагин, вы сможете точно настроить, какие таблицы и данные оптимизировать, как часто запускать очистку и интегрировать это с другими процессами сайта.
Структура плагина и основные хуки WordPress
Для начала создадим минимальный каркас плагина с названием wpblog_db_optimizer. Основные моменты:
- Регистрация плагина;
- Добавление задания в WP-Cron для регулярной оптимизации;
- Функции очистки и оптимизации таблиц;
- Админ-страница для ручного запуска и настройки.
Регистрация и активация плагина:
<?php
/*
Plugin Name: WPBlog DB Optimizer
Description: Автоматическая оптимизация базы данных WordPress.
Version: 1.0
Author: wp-blog.ru
*/
register_activation_hook(__FILE__, 'wpblog_db_optimizer_activation');
register_deactivation_hook(__FILE__, 'wpblog_db_optimizer_deactivation');
function wpblog_db_optimizer_activation() {
if (!wp_next_scheduled('wpblog_db_optimizer_cron')) {
wp_schedule_event(time(), 'daily', 'wpblog_db_optimizer_cron');
}
}
function wpblog_db_optimizer_deactivation() {
wp_clear_scheduled_hook('wpblog_db_optimizer_cron');
}
Здесь мы создаём ежедневное задание WP-Cron для запуска оптимизации.
Реализация функций очистки и оптимизации
Теперь реализуем основную функцию оптимизации. Для удаления мусорных данных используем стандартные запросы WP и прямые SQL-запросы для оптимизации таблиц.
add_action('wpblog_db_optimizer_cron', 'wpblog_db_optimizer_run');
function wpblog_db_optimizer_run() {
global $wpdb;
// Удаляем старые ревизии постов
$wpdb->query("DELETE FROM {$wpdb->prefix}posts WHERE post_type = 'revision'");
// Удаляем авто-сохранения
$wpdb->query("DELETE FROM {$wpdb->prefix}posts WHERE post_status = 'auto-draft'");
// Удаляем удалённые записи из корзины
$wpdb->query("DELETE FROM {$wpdb->prefix}posts WHERE post_status = 'trash'");
// Удаляем спам и мусорные комментарии
$wpdb->query("DELETE FROM {$wpdb->prefix}comments WHERE comment_approved = 'spam' OR comment_approved = 'trash'");
// Удаляем устаревшие транзиенты
$transients = $wpdb->get_results("SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE '_transient_%'", ARRAY_A);
foreach ($transients as $transient) {
$name = str_replace('_transient_', '', $transient['option_name']);
if (get_transient($name) === false) {
delete_transient($name);
}
}
// Оптимизация таблиц
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
foreach ($tables as $table) {
$wpdb->query('OPTIMIZE TABLE ' . $table[0]);
}
}
Этот код удаляет основные виды мусорных данных и оптимизирует все таблицы базы данных, что помогает снизить её размер и повысить скорость.
Добавление админ-страницы для управления плагином
Чтобы сделать плагин удобнее, добавим страницу в админ-панель, где можно запускать оптимизацию вручную и видеть статус.
add_action('admin_menu', 'wpblog_db_optimizer_menu');
function wpblog_db_optimizer_menu() {
add_management_page('Оптимизация Базы WPBlog', 'Оптимизация Базы WPBlog', 'manage_options', 'wpblog-db-optimizer', 'wpblog_db_optimizer_page');
}
function wpblog_db_optimizer_page() {
if (isset($_POST['run_optimizer']) && check_admin_referer('wpblog_db_optimizer_action', 'wpblog_db_optimizer_nonce')) {
wpblog_db_optimizer_run();
echo '<div class="updated notice">Оптимизация базы данных выполнена успешно.</div>';
}
?>
<div class="wrap">
<h1>Оптимизация базы данных WordPress</h1>
<form method="post">
<?php wp_nonce_field('wpblog_db_optimizer_action', 'wpblog_db_optimizer_nonce'); ?>
<input type="submit" name="run_optimizer" class="button button-primary" value="Запустить оптимизацию"/>
</form>
</div>
<?php
}
Теперь администратор может запустить очистку и оптимизацию базы вручную одним кликом.
Расширение функционала: планирование и уведомления
Для удобства можно добавить уведомления на e-mail после завершения оптимизации и возможность настраивать расписание из админки. Например, использовать дополнительные опции и формы для выбора периодичности.
Это позволит гибко управлять процессом и быть в курсе состояния базы без лишних усилий.
Пример отправки уведомления после оптимизации
function wpblog_db_optimizer_run() {
global $wpdb;
// ... код оптимизации ...
// Отправка письма администратору
$admin_email = get_option('admin_email');
wp_mail($admin_email, 'Оптимизация базы данных завершена', 'База данных вашего сайта успешно оптимизирована.');
}
Выводы и рекомендации
Собственный плагин для автоматической оптимизации базы данных — мощный инструмент для поддержки производительности WordPress-сайта. Вы получаете полное управление процессом, возможность тонкой настройки и интеграции в свои рабочие процессы.
Если хотите расширить возможности, можно добавить очистку кэша, интеграцию с популярными плагинами, например, Clearfy, который уже содержит множество полезных оптимизаций.
Создайте свой плагин, экспериментируйте с кодом и делайте свой WordPress быстрее и стабильнее!