wpmake.ru wordpress WPMake

Как удалить загрязнения базы данных WordPress без плагинов

Любой сайт на 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();
});

Это запустит очистку раз в сутки без вашего участия.

×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙