Как автоматизировать удаление старых медиафайлов в WordPress

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

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

Медиафайлы — это изображения, видео, аудио и другие загруженные файлы, которые используются для наполнения контента сайта. Со временем среди них появляются устаревшие, неиспользуемые или дублирующиеся файлы, которые:

  • Захламляют хранилище и увеличивают размер резервных копий.
  • Могут замедлять работу сайта, если медиа-библиотека слишком большая.
  • Создают дополнительные расходы на хостинг.

Ручное удаление каждого файла — трудоёмкий и рискованный процесс. Автоматизация позволяет безопасно и регулярно очищать библиотеку.

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

Прежде чем удалять, важно понять, какие медиафайлы считаются «старыми» и неиспользуемыми. Обычно это файлы, которые:

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

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

Автоматизация удаления через WPManual_cron_delete_old_media: пример кода

Для автоматического удаления старых медиафайлов используем WP-Cron. Создадим функцию, которая найдет и удалит вложения старше 180 дней без привязки к контенту.

function wpmanual_cron_delete_old_media() {
    $args = array(
        'post_type'      => 'attachment',
        'post_status'    => 'inherit',
        'posts_per_page' => -1,
        'date_query'     => array(
            array(
                'column' => 'post_date',
                'before' => '180 days ago',
            ),
        ),
        'meta_query' => array(
            array(
                'key'     => '_wp_attachment_metadata',
                'compare' => 'EXISTS',
            ),
        ),
    );

    $attachments = get_posts($args);

    foreach ($attachments as $attachment) {
        // Проверяем, используется ли файл в постах
        $usage_count = 0;
        $attachment_url = wp_get_attachment_url($attachment->ID);

        // Поиск использования в содержимом
        global $wpdb;
        $usage_count = $wpdb->get_var($wpdb->prepare(
            "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE %s",
            '%' . $wpdb->esc_like($attachment_url) . '%'
        ));

        // Если не используется, удаляем
        if ($usage_count == 0) {
            wp_delete_attachment($attachment->ID, true);
        }
    }
}

// Регистрация события cron при активации темы или плагина
if (!wp_next_scheduled('wpmanual_cron_delete_old_media_event')) {
    wp_schedule_event(time(), 'daily', 'wpmanual_cron_delete_old_media_event');
}

add_action('wpmanual_cron_delete_old_media_event', 'wpmanual_cron_delete_old_media');

В этом коде мы:

  • Ищем вложения старше 180 дней.
  • Проверяем наличие ссылок на файл в контенте сайта.
  • Удаляем, если файл не используется.
  • Запускаем функцию ежедневно через WP-Cron.

Управление расписанием WP-Cron

По умолчанию WP-Cron запускается при посещении сайта, что может быть не идеально для сайтов с низким трафиком. Чтобы обеспечить регулярность, можно:

  • Настроить системный cron на сервере для вызова wp-cron.php каждую минуту.
  • Использовать плагин WP Crontrol для просмотра и управления заданиями WP-Cron.

Плагины для автоматизации удаления медиа и очистки библиотеки

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

  • Media Cleaner — анализирует и удаляет неиспользуемые медиафайлы из библиотеки и папок uploads. Есть Pro-версия с расширенными функциями.
  • DNUI (Delete Not Used Image) — простой плагин для поиска и удаления неиспользуемых изображений.
  • Force Regenerate Thumbnails — полезен для очистки и переработки миниатюр, чтобы не хранить лишние размеры.

При работе с плагинами всегда делайте резервную копию данных!

Как использовать WPManual для оптимизации медиа

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

Рекомендации по безопасности и резервному копированию

Удаление медиафайлов — операция с потенциальным риском потери нужных данных. Чтобы избежать проблем:

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

Итоги

Автоматизация удаления старых медиафайлов в WordPress — эффективный способ поддерживать сайт в порядке и экономить ресурсы. С помощью WP-Cron и правильных проверок можно настроить регулярную очистку без риска удаления нужных данных. Плагины, такие как Media Cleaner или Clearfy Pro, облегчают задачу и предоставляют удобный интерфейс для управления медиа. Главное — всегда работать аккуратно и с резервными копиями.

Как проверить и использовать WP-Cron для автоматизации задач в WordPress
15.04.2026
WooCommerce: запрет создания новых заказов по предоплаченным товарам
30.04.2026
Как удалять и изменять поля пользователя в WordPress через код
11.04.2026
Как удалить мета данные из базы данных WordPress
28.11.2025
Как удалить заблокированных пользователей WordPress с помощью кода
30.03.2026