wpcodes.ru wordpress WP Codеs

Автоматическое удаление неиспользуемых частей данных в WordPress

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

Почему важно удалять неиспользуемые данные в WordPress

WordPress активно сохраняет данные для обеспечения безопасности и удобства работы с контентом. Например, после каждого изменения записывается ревизия, а также создаются временные данные (транзиенты) для кэширования запросов. Однако со временем эти данные могут стать устаревшими и не нужными. Вот основные причины, почему нужно регулярно чистить базу от мусора:

  • Повышение скорости работы сайта. Чем меньше объем базы данных, тем быстрее выполняются запросы.
  • Экономия места на сервере. Особенно актуально для хостингов с ограничениями.
  • Уменьшение времени резервного копирования. Меньше данных — быстрее создаются и восстанавливаются бэкапы.
  • Улучшение стабильности и безопасности. Неиспользуемые данные могут содержать устаревшие ссылки, настройки и уязвимости.

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

Типы неиспользуемых данных в WordPress

Среди наиболее распространённых «мусорных» данных выделим следующие категории:

Ревизии и авто-сохранения постов

WordPress по умолчанию хранит каждое изменение записи в базе, создавая ревизии. Это удобно, если нужно откатиться к предыдущей версии, но с течением времени количество ревизий может быть очень большим. Аналогично, авто-сохранения создаются во время редактирования, но после публикации они становятся не нужны.

Спам и мусорные комментарии

Комментарии со статусом «спам» или «корзина» занимают место и не нужны для работы сайта. Их регулярное удаление поможет очистить базу.

Транзиенты

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

Неактивные плагины и темы с данными

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

Автоматизация удаления данных с помощью плагинов

Существует несколько удобных плагинов, которые помогут настроить автоматическую очистку базы данных без необходимости писать код.

WP-Optimize

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

  • Интерфейс прост и понятен.
  • Можно выбирать, какие именно данные удалять.
  • Плагин также выполняет оптимизацию таблиц базы данных.

Advanced Database Cleaner

Более продвинутый инструмент с возможностью точного анализа и очистки. Позволяет управлять ревизиями, дубликатами, транзиентами, а также выявлять неиспользуемые таблицы плагинов и тем.

  • Есть возможность запланировать автоматическую очистку.
  • Отображает подробную статистику перед удалением.
  • Поддержка мультисайтов.

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

Кастомные решения для автоматической очистки базы

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

function wpcodes_delete_old_revisions() {
    global $wpdb;
    $limit = 100; // Максимум удаляем за один запуск

    $revisions = $wpdb->get_col("SELECT ID FROM {$wpdb->posts} WHERE post_type = 'revision' ORDER BY post_date ASC LIMIT %d", $limit);

    if (!empty($revisions)) {
        foreach ($revisions as $revision_id) {
            wp_delete_post($revision_id, true);
        }
    }
}

function wpcodes_delete_expired_transients() {
    global $wpdb;
    $time = time();
    $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM {$wpdb->options} WHERE option_name LIKE '_transient_timeout_%' AND option_value < %d",
            $time
        )
    );
    $wpdb->query(
        "DELETE a FROM {$wpdb->options} a LEFT JOIN {$wpdb->options} b ON REPLACE(a.option_name, '_timeout', '') = b.option_name WHERE a.option_name LIKE '_transient_timeout_%' AND b.option_name IS NULL"
    );
}

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

add_action('wpcodes_daily_cleanup_hook', 'wpcodes_delete_old_revisions');
add_action('wpcodes_daily_cleanup_hook', 'wpcodes_delete_expired_transients');

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

Удаление спама и мусорных комментариев программно

Для регулярного удаления спам-комментариев тоже можно добавить автоматический процесс. Пример функции и её привязка к крону:

function wpcodes_delete_spam_comments() {
    $spam_comments = get_comments(array(
        'status' => 'spam',
        'number' => 100,
        'fields' => 'ids',
    ));

    foreach ($spam_comments as $comment_id) {
        wp_delete_comment($comment_id, true);
    }
}

if (!wp_next_scheduled('wpcodes_daily_spam_cleanup_hook')) {
    wp_schedule_event(time(), 'daily', 'wpcodes_daily_spam_cleanup_hook');
}

add_action('wpcodes_daily_spam_cleanup_hook', 'wpcodes_delete_spam_comments');

Этот код удаляет до 100 спам-комментариев ежедневно, предотвращая накопление мусора.

Рекомендации по безопасной очистке базы данных

Несмотря на пользу очистки, будьте осторожны с удалением данных. Рекомендуется придерживаться следующих правил:

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

Соблюдая эти рекомендации, вы сможете автоматически поддерживать ваш WordPress-сайт в оптимальном состоянии без риска потери данных.

×

Создай идеальный сайт – теперь на 15% дешевле!

Подобрать тему →