С течением времени база данных WordPress накапливает множество «мусорных» данных: ревизии постов, спам-комментарии, временные опции, устаревшие транзиенты и многое другое. Всё это замедляет работу сайта и увеличивает нагрузку на сервер. В этой статье мы рассмотрим, как настроить автоматическую удалённую очистку базы данных WordPress, используя как плагины, так и кастомные решения с примерами кода.
Почему важна регулярная очистка базы данных WordPress
База данных — это сердце любого сайта на WordPress. Со временем она засоряется:
- ревизии постов создают несколько копий контента;
- неактуальные черновики и удалённые записи остаются в базе;
- спам и неутверждённые комментарии занимают место;
- транзиенты и временные опции, которые не очищаются вовремя;
- логи плагинов и другие служебные таблицы.
Если не очищать базу, это приводит к увеличению размера базы, снижению скорости запросов и, как следствие, замедлению сайта. Особенно это критично для сайтов с большим трафиком или большим количеством контента.
Обзор плагинов для автоматической очистки базы данных
Для автоматизации процесса очистки существуют плагины, которые можно настроить на регулярное выполнение:
WP-Optimize
Это популярный плагин с функцией очистки базы данных, оптимизации таблиц и кэширования. Позволяет настроить автоматическую очистку по расписанию.
Advanced Database Cleaner
Плагин с расширенными возможностями очистки: удаление ревизий, спама, транзиентов и неиспользуемых данных плагинов. Поддерживает автоматизацию через WP-Cron.
Clearfy Pro
Плагин с набором оптимизаций WordPress, включая очистку базы данных. Поддерживает глубокую настройку и автоматизацию, а также интеграцию с другими инструментами оптимизации.
Как настроить автоматическую очистку базы данных с помощью WP-CLI и WP-Cron
Если вы предпочитаете собственные решения или хотите автоматизировать очистку на удалённом сервере, удобным вариантом будет использование WP-CLI в связке с WP-Cron.
WP-CLI — это командная утилита для управления WordPress из консоли. С её помощью можно удалять ревизии, оптимизировать таблицы и выполнять другие задачи.
Пример команды для удаления всех ревизий постов:
wp post delete $(wp post list --post_type='revision' --format=ids) --forceДля автоматизации можно создать PHP-функцию и привязать её к событию WP-Cron, чтобы запускать эти команды регулярно.
Пример функции для удаления ревизий с префиксом wpconsult_
function wpconsult_delete_post_revisions() {
global $wpdb;
$revisions = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision'");
foreach ( $revisions as $revision_id ) {
wp_delete_post( $revision_id, true );
}
}
add_action( 'wpconsult_daily_cleanup', 'wpconsult_delete_post_revisions' );
// Запланировать событие раз в день
if ( ! wp_next_scheduled( 'wpconsult_daily_cleanup' ) ) {
wp_schedule_event( time(), 'daily', 'wpconsult_daily_cleanup' );
}Этот код создаёт пользовательское событие WP-Cron wpconsult_daily_cleanup, которое раз в день запускает функцию удаления ревизий. Можно расширить функцию, добавив очистку спам-комментариев, транзиентов и оптимизацию таблиц.
Расширение функции очистки
function wpconsult_full_database_cleanup() {
global $wpdb;
// Удаляем ревизии
$revisions = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision'");
foreach ( $revisions as $revision_id ) {
wp_delete_post( $revision_id, true );
}
// Удаляем спам-комментарии
$spam_comments = $wpdb->get_col("SELECT comment_ID FROM {$wpdb->comments} WHERE comment_approved = 'spam'");
foreach ( $spam_comments as $comment_id ) {
wp_delete_comment( $comment_id, true );
}
// Очистка транзиентов
$wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' OR option_name LIKE '_site_transient_%'");
// Оптимизация всех таблиц
$tables = $wpdb->get_results('SHOW TABLES', ARRAY_N);
foreach ( $tables as $table ) {
$wpdb->query("OPTIMIZE TABLE {$table[0]}");
}
}
add_action( 'wpconsult_daily_cleanup', 'wpconsult_full_database_cleanup' );Удалённая очистка базы данных через SSH и WP-CLI
Если ваш сайт размещён на удалённом сервере с SSH-доступом, можно запускать очистку базы данных напрямую через WP-CLI команду с вашего локального компьютера или с другого сервера. Это удобно для автоматизации в рамках CI/CD или при использовании внешних скриптов.
Пример команды на удалённом сервере:
ssh user@yourserver.com 'wp post delete $(wp post list --post_type="revision" --format=ids) --force'Чтобы запускать такую команду регулярно, используйте cron на вашем локальном сервере или CI-систему.
Практические рекомендации по безопасности и оптимизации
При автоматической очистке важно соблюдать меры безопасности:
- Используйте префиксы функций и событий, например,
wpconsult_, чтобы избежать конфликтов с другими плагинами. - Проверяйте, что пользователь, от имени которого запускается WP-CLI, имеет достаточные права.
- Резервное копирование базы данных перед автоматической очисткой — обязательное условие.
- Не очищайте данные, которые могут быть нужны плагинам или кастомным функциям.
Заключение
Автоматическая удалённая очистка базы данных WordPress — важный шаг для поддержания производительности сайта и снижения нагрузки на сервер. Использование плагинов, таких как WP-Optimize или Clearfy Pro, значительно упрощает задачу, но при необходимости можно реализовать кастомные решения на базе WP-Cron и WP-CLI.
Для загрузки и автоматизации полезных плагинов оптимизации посетите wpshop.ru.