Поддержание чистоты базы данных WordPress — важный аспект оптимизации производительности сайта. Со временем в базе накапливаются ревизии постов, мусорные комментарии, устаревшие опции и транзиенты, которые замедляют работу и увеличивают размер базы данных. Регулярное удаление этих данных помогает ускорить сайт и снизить нагрузку на сервер.
Почему стоит автоматизировать очистку базы данных WordPress
Ручная очистка базы требует постоянного контроля и регулярного выполнения процедур, что неудобно и часто забывается. Автоматизация процесса позволяет настроить регулярное удаление ненужных данных без вашего участия. Это минимизирует риски накопления «мусора» и поддерживает базу в оптимальном состоянии.
Кроме того, автоматизация снижает риск случайного удаления важных данных, так как процесс можно тщательно программировать и тестировать.
Основные типы данных для удаления
Для эффективной очистки базы данных обычно удаляют следующие элементы:
- Ревизии постов — промежуточные сохранения изменений контента, которые могут быть многочисленными и не всегда нужны.
- Мусорные и спам-комментарии — комментарии, отфильтрованные системой, но не удалённые.
- Транзиенты — временные данные кэширования, которые могут устаревать.
- Опции, связанные с временными плагинами — настройки удалённых плагинов, которые остаются в базе.
Создаем простой плагин для автоматической очистки базы данных
Далее рассмотрим, как написать плагин, который будет запускать очистку базы данных по расписанию. Мы используем встроенный WP-Cron для выполнения задачи раз в сутки.
Шаг 1. Создаем структуру плагина
В папке wp-content/plugins создайте папку wpkit-db-cleaner и файл wpkit-db-cleaner.php с таким кодом:
<?php
/**
* Plugin Name: WPKit DB Cleaner
* Description: Автоматическая очистка базы данных WordPress от ревизий, мусорных комментариев и транзиентов.
* Version: 1.0
* Author: WPKit
*/
// Защита от прямого доступа
if (!defined('ABSPATH')) {
exit;
}
Шаг 2. Функция для очистки базы данных
Определим функцию wpkit_db_cleaner_run(), которая удалит ревизии, мусорные комментарии и транзиенты.
function wpkit_db_cleaner_run() {
global $wpdb;
// Удаление ревизий постов
$revisions = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
// Удаление мусорных комментариев
$comments = $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'trash'");
// Удаление устаревших транзиентов
$transients = $wpdb->query(
"DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'"
);
// Удаление просроченных транзиентов
$now = time();
$expired = $wpdb->query(
$wpdb->prepare(
"DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < %d",
$now
)
);
return array(
'revisions_deleted' => $revisions,
'comments_deleted' => $comments,
'transients_deleted' => $transients + $expired,
);
}
Шаг 3. Планировщик задачи WP-Cron
Добавим крон-задачу, которая будет запускать очистку раз в сутки.
function wpkit_db_cleaner_schedule() {
if (!wp_next_scheduled('wpkit_db_cleaner_cron')) {
wp_schedule_event(time(), 'daily', 'wpkit_db_cleaner_cron');
}
}
add_action('wp', 'wpkit_db_cleaner_schedule');
add_action('wpkit_db_cleaner_cron', 'wpkit_db_cleaner_cron_exec');
function wpkit_db_cleaner_cron_exec() {
$results = wpkit_db_cleaner_run();
// Для отладки можно сохранить результаты в лог
if (defined('WP_DEBUG') && WP_DEBUG) {
error_log('WPKit DB Cleaner: удалено ревизий: ' . $results['revisions_deleted']);
error_log('WPKit DB Cleaner: удалено мусорных комментариев: ' . $results['comments_deleted']);
error_log('WPKit DB Cleaner: удалено транзиентов: ' . $results['transients_deleted']);
}
}
Шаг 4. Очистка при деактивации плагина
Чтобы не оставлять запланированные задачи после удаления плагина, добавим деактивационный хук.
function wpkit_db_cleaner_deactivate() {
wp_clear_scheduled_hook('wpkit_db_cleaner_cron');
}
register_deactivation_hook(__FILE__, 'wpkit_db_cleaner_deactivate');
Дополнительные рекомендации и улучшения
Вы можете расширить функционал плагина, добавив:
- Админ-панель с настройками, чтобы выбирать, какие типы данных очищать.
- Отправку email-уведомлений об успешном выполнении очистки.
- Логирование в отдельный файл для отслеживания истории очисток.
- Очистку других типов устаревших данных, например, опций удалённых плагинов.
Если вы предпочитаете готовые решения, обратите внимание на плагин Clearfy — он включает функции оптимизации и очистки базы, которые можно настроить под себя без программирования.
Заключение
Автоматическое очищение базы данных WordPress — простой, но эффективный способ поддерживать сайт быстрым и стабильным. Создание собственного плагина даст полный контроль над процессом и поможет избежать лишних нагрузок. Используйте пример из статьи как основу и адаптируйте его под свои нужды.