Как настроить очистку базы данных WordPress от удалённых записей

При активном использовании WordPress на сайте со временем в базе данных накапливается большое количество удалённых записей, ревизий, транзиентов и других элементов, которые замедляют работу сайта и занимают лишнее место. В этой статье мы подробно рассмотрим, как правильно и безопасно настроить очистку базы данных WordPress от удалённых записей, чтобы поддерживать её в оптимальном состоянии.

Почему важно очищать базу данных от удалённых записей и ревизий

При удалении записей, страниц или пользовательских типов записей в WordPress, они обычно не исчезают из базы данных сразу — они попадают в корзину и остаются там некоторое время. Кроме того, WordPress сохраняет ревизии — версии записей для отката, а также транзиенты — временные данные кэширования. Если не очищать эти данные, таблицы wp_posts и wp_postmeta могут раздуваться, что приведёт к снижению производительности сайта и увеличению времени отклика.

Регулярная очистка базы данных помогает:

  • Уменьшить размер базы данных и ускорить её работу.
  • Снизить нагрузку на сервер при запросах к базе.
  • Оптимизировать резервное копирование и восстановление.
  • Поддерживать сайт в хорошем состоянии без лишнего мусора.

Основные типы данных для очистки

Удалённые записи (Trash)

Записи и страницы, помещённые в корзину, по умолчанию хранятся 30 дней, после чего автоматически удаляются. Однако на многих сайтах корзина может содержать сотни записей, которые занимают место.

Ревизии (Revisions)

Каждый раз при сохранении записи WordPress создаёт ревизию — копию предыдущей версии. Ревизии очень полезны, но их количество может сильно вырасти, если не ограничивать их количество.

Транзиенты (Transients)

Транзиенты — это временный кэш, который хранится в базе данных. Иногда они не удаляются после истечения срока, накапливая лишние записи.

Как вручную очистить базу данных через SQL-запросы

Если у вас есть доступ к базе данных через phpMyAdmin или другой инструмент, можно выполнить следующие SQL-запросы для очистки.

Удаление записей из корзины

DELETE FROM wp_posts WHERE post_status = 'trash';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts);

Первый запрос удаляет все записи в статусе «trash», второй — связанные с ними метаданные.

Удаление всех ревизий

DELETE FROM wp_posts WHERE post_type = 'revision';
DELETE FROM wp_postmeta WHERE post_id NOT IN (SELECT ID FROM wp_posts);

Так вы удалите все ревизии записей. Будьте осторожны, если хотите сохранить историю изменений.

Удаление устаревших транзиентов

Транзиенты хранятся в таблице wp_options с ключами, начинающимися с '_transient_'. Чтобы удалить просроченные транзиенты, выполните:

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();

Автоматизация очистки базы данных через функции WordPress

Вместо ручного удаления можно написать функцию, которая будет регулярно очищать базу данных. Добавьте следующий код в файл functions.php вашей темы или в кастомный плагин.

function wpcourse_clear_trash_and_revisions() {
    global $wpdb;

    // Удаляем записи из корзины
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_status = 'trash'");

    // Удаляем ревизии
    $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'revision'");

    // Удаляем метаданные, связанных с удалёнными записями
    $wpdb->query("DELETE pm FROM {$wpdb->postmeta} pm LEFT JOIN {$wpdb->posts} p ON pm.post_id = p.ID WHERE p.ID IS NULL");

    // Удаляем просроченные транзиенты
    $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_%' AND option_name NOT LIKE '_transient_timeout_%'");
    $wpdb->query("DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP()");
}

// Запускаем очистку раз в сутки
if (!wp_next_scheduled('wpcourse_daily_db_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpcourse_daily_db_cleanup');
}
add_action('wpcourse_daily_db_cleanup', 'wpcourse_clear_trash_and_revisions');

Этот код создаёт ежедневное событие cron, которое очищает базу от мусора.

Использование плагинов для очистки базы данных

Если не хотите писать код, можно использовать проверенные плагины. Вот несколько рекомендаций:

  • Clearfy Pro — продвинутый инструмент оптимизации сайта, который имеет встроенные функции для удаления ревизий, очищения корзины и транзиентов. Подробнее: Clearfy Pro на WPSHOP.
  • WP-Optimize — популярный бесплатный плагин для очистки базы данных и оптимизации таблиц.
  • Advanced Database Cleaner — позволяет планировать очистки, удалять ревизии, транзиенты, мусорные данные.

Использование плагинов удобно, если вы не хотите самостоятельно заниматься кодом и хотите получить интерфейс с настройками.

Как ограничить количество ревизий для предотвращения разрастания базы

Чтобы не накапливать слишком много ревизий, можно ограничить их количество в wp-config.php, добавив строку:

define('WP_POST_REVISIONS', 5);

Это сохранит только 5 последних ревизий для каждой записи, остальные будут удаляться автоматически.

Выводы и рекомендации

Оптимизация базы данных WordPress — важный аспект поддержки сайта. Регулярная очистка от удалённых записей, ревизий и транзиентов повышает скорость и стабильность работы. Можно использовать как ручные SQL-запросы, так и автоматические решения с помощью кода или плагинов. Для большинства проектов оптимальным будет комбинированный подход: ограничение ревизий, автоматическая очистка через cron и периодический аудит базы.

Как избежать конфликтов между плагинами в WordPress: диагностика и решение
13.06.2026
Как использовать хуки для оптимизации WordPress
14.01.2026
Как создать Custom Post Type в WordPress с примерами кода
21.11.2025
Как отключить возможность изменения адреса доставки в WooCommerce после оформления заказа
07.06.2026
Как создать динамические таблицы в WordPress с помощью шорткода
15.03.2026

Хотите научиться создавать сайты и зарабатывать на этом от 30 000 рублей в месяц?

Записаться на курс сейчас