Оптимизация базы данных — одна из ключевых задач по поддержке производительности сайта на 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 — отличный способ обучиться работе с базой и обеспечить стабильную работу сайта. В этой статье мы разобрали основные виды мусорных данных, создали базовый плагин с интерфейсом и автоматической очисткой, а также рассмотрели расширенные возможности.
Поддерживайте базу в чистоте — и ваш сайт будет работать быстрее и стабильнее.