Любой сайт на WordPress со временем накапливает множество «мусора» в базе данных: старые ревизии, автоматические черновики, спам-комментарии, транзиенты и другие лишние записи, которые замедляют работу сайта и занимают место на сервере. В этой статье мы подробно разберем, как эффективно очистить базу данных WordPress вручную, без использования плагинов, с примерами SQL-запросов и PHP-кода для выполнения задач прямо из админки или через подключение к базе данных.
Почему важно удалять загрязнения базы данных WordPress
Со временем база данных WordPress разрастается и содержит многие ненужные записи:
- ревизии постов, которые копируют каждую правку;
- автоматические черновики, которые создаются при автосохранении;
- спам и удаленные комментарии;
- транзиенты — временные кэшированные данные, которые не всегда удаляются вовремя;
- старые записи метаданных и опций, которые не используются;
- остаточные таблицы от удаленных плагинов.
Все это замедляет запросы к базе, увеличивает размер резервных копий и может привести к перебоям в работе сайта при больших объемах данных.
Умение вручную очистить базу без плагинов полезно в случаях, когда плагин не установлен, нет доступа к админке или вы хотите точечно контролировать процесс.
Удаление ревизий и автоматических черновиков
Ревизии — это сохранения предыдущих версий поста, WordPress хранит их без ограничений по умолчанию. Автоматические черновики создаются при автосохранении и могут оставаться после публикации.
Для удаления ревизий и автосохранений выполните следующий SQL-запрос в PhpMyAdmin или через подключение к базе:
DELETE FROM wp_posts WHERE post_type = 'revision';
DELETE FROM wp_posts WHERE post_status = 'auto-draft';
Если префикс таблиц отличается, замените wp_ на ваш.
Также можно сделать это программно, добавив в файл темы или плагина функцию с префиксом wpmake_:
function wpmake_delete_revisions_and_autodrafts() {
global $wpdb;
$deleted_revisions = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");
$deleted_autodrafts = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_status = 'auto-draft'");
return array('revisions' => $deleted_revisions, 'autodrafts' => $deleted_autodrafts);
}
Вызов этой функции очистит ревизии и автосохранения.
Очистка спама и удаленных комментариев
Спам и удаленные комментарии занимают место и тормозят запросы, их можно очистить так:
DELETE FROM wp_comments WHERE comment_approved = 'spam';
DELETE FROM wp_comments WHERE comment_approved = 'trash';
Для автоматизации очистки добавим PHP-функцию:
function wpmake_delete_spam_and_trash_comments() {
global $wpdb;
$spam_deleted = $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'spam'");
$trash_deleted = $wpdb->query("DELETE FROM {$wpdb->comments} WHERE comment_approved = 'trash'");
return array('spam' => $spam_deleted, 'trash' => $trash_deleted);
}
Регулярная очистка комментариев поможет снизить нагрузку на базу.
Удаление просроченных транзиентов
Транзиенты — это временные данные, обычно с временем жизни, которые не всегда удаляются вовремя. Они хранятся в таблице wp_options с префиксами _transient_ и _transient_timeout_.
SQL-запрос для удаления устаревших транзиентов:
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%';
DELETE FROM wp_options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP();
Или программно с помощью WP-функций:
function wpmake_delete_expired_transients() {
global $wpdb;
$time = time();
$expired = $wpdb->get_col(
$wpdb->prepare(
"SELECT option_name FROM {$wpdb->options} WHERE option_name LIKE %s",
'_transient_timeout_%'
)
);
$deleted = 0;
foreach ($expired as $option) {
$timeout = (int) get_option(str_replace('_timeout', '', $option));
if ($timeout < $time) {
delete_option(str_replace('_timeout', '', $option));
delete_option($option);
$deleted++;
}
}
return $deleted;
}
Регулярная очистка транзиентов ускоряет работу кэша и уменьшает размер базы.
Удаление остаточных таблиц и записей от удалённых плагинов
Некоторые плагины при удалении оставляют свои таблицы или записи в базе. Их можно найти и удалить вручную.
Для начала получите список таблиц базы данных:
SHOW TABLES;
Поищите таблицы с именами плагинов, например wp_wpshop_reviews или похожие.
Удаление таблицы:
DROP TABLE wp_wpshop_reviews;
Также можно удалить опции плагина из таблицы wp_options:
DELETE FROM wp_options WHERE option_name LIKE '%wpshop%';
Будьте осторожны и делайте резервные копии перед удалением.
Использование плагина Clearfy для безопасной очистки базы данных
Если вы хотите более удобный и безопасный способ, рекомендуем использовать плагин Clearfy, который позволяет настроить автоматическую очистку базы, удалять ревизии, спам, транзиенты и оптимизировать таблицы одним кликом.
Clearfy — отличный выбор для тех, кто хочет автоматизировать процесс без риска.
Как автоматизировать очистку базы данных с WP-Cron
Для регулярной очистки базы данных можно использовать WP-Cron и функцию, подобную нашей wpmake_delete_revisions_and_autodrafts. Добавьте в functions.php следующий код:
if (!wp_next_scheduled('wpmake_database_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpmake_database_cleanup');
}
add_action('wpmake_database_cleanup', function() {
wpmake_delete_revisions_and_autodrafts();
wpmake_delete_spam_and_trash_comments();
wpmake_delete_expired_transients();
});
Это запустит очистку раз в сутки без вашего участия.