WordPress: как автоматически удалять старые медиафайлы для оптимизации сайта

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

Почему важно удалять старые медиафайлы в WordPress

Часто после удаления записей или смены контента файлы остаются в медиа-библиотеке. Они занимают дисковое пространство, увеличивают размер резервных копий и могут замедлять работу сайта. Регулярное удаление таких файлов помогает:

  • Снизить нагрузку на сервер и ускорить бэкапы;
  • Улучшить скорость загрузки сайта, особенно при использовании CDN и кеширования;
  • Поддерживать порядок и удобство в админке;
  • Снизить риски безопасности, связанные с неиспользуемыми файлами.

Как определить, какие медиафайлы можно удалять

Для безопасного удаления нужно понять, какие файлы не используются на сайте. Основные критерии:

  • Файл не прикреплен к записи или странице (attachment post отсутствует);
  • Файл не вставлен в контент записей (проверка по URL в содержимом);
  • Файл не используется в миниатюрах, галереях, кастомных полях;
  • Файл старше определённого срока (например, 1 год) и неактивен.

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

Использование плагинов для автоматического удаления медиафайлов

Среди популярных решений выделяются:

  • Media Cleaner — мощный плагин, который сканирует медиа-библиотеку на предмет неиспользуемых файлов и предлагает их удалить. Поддерживает фильтрацию по времени, интеграцию с WooCommerce и кастомными постами.
  • WP-Optimize — кроме оптимизации базы данных, умеет удалять старые и неиспользуемые медиафайлы. Удобен для комплексной оптимизации сайта.
  • Clearfy Pro — в пакете оптимизаций есть функции очистки медиа и автоматического удаления временных файлов. Подробнее на wpshop.ru.

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

Как сделать автоматическое удаление старых медиафайлов с помощью кода

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

Пример функции для поиска неиспользуемых медиафайлов

function wpkit_find_unused_attachments($days_old = 365) {
    global $wpdb;
    $date_limit = date('Y-m-d H:i:s', strtotime("-{$days_old} days"));

    $query = $wpdb->prepare(
        "SELECT ID, guid FROM {$wpdb->posts} 
         WHERE post_type = 'attachment' 
         AND post_date < %s ",
        $date_limit
    );

    $attachments = $wpdb->get_results($query);
    $unused = [];

    foreach ($attachments as $attachment) {
        // Проверяем вхождение файла в контент
        $count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($attachment->guid) . '%'
        ));

        if ($count == 0) {
            $unused[] = $attachment->ID;
        }
    }
    return $unused;
}

Эта функция возвращает ID вложений старше $days_old дней, которые не используются в контенте. Далее можно их удалить программно.

Функция для удаления найденных вложений

function wpkit_delete_unused_attachments($attachment_ids) {
    foreach ($attachment_ids as $id) {
        wp_delete_attachment($id, true); // Удаляем физически
    }
}

Автоматизация удаления по расписанию с помощью WP-Cron

Для периодической очистки добавим задачу в WP-Cron:

function wpkit_schedule_cleanup() {
    if (!wp_next_scheduled('wpkit_cleanup_unused_media')) {
        wp_schedule_event(time(), 'daily', 'wpkit_cleanup_unused_media');
    }
}
add_action('wp', 'wpkit_schedule_cleanup');

add_action('wpkit_cleanup_unused_media', function() {
    $unused = wpkit_find_unused_attachments(365);
    wpkit_delete_unused_attachments($unused);
});

Этот код настроит ежедневный запуск удаления неиспользуемых файлов старше года. При необходимости интервал и время можно менять.

Рекомендации и меры предосторожности

Удаление медиафайлов — критичная операция, поэтому рекомендуем:

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

Выводы

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

Как разделить комментарии на страницы в WordPress
29.01.2026
WordPress: как создать свой плагин с настройками в админке
05.11.2025
Как использовать REST API для создания кастомизированных решений в WordPress
06.12.2025
Как создать автоматический системный логгер в WordPress для отладки и мониторинга
12.03.2026
Как создать AJAX фильтр товаров в WordPress
16.01.2026