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

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

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

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

  • Занятие лишнего дискового пространства на сервере.
  • Проблемы с бэкапами – они становятся больше и дольше создаются.
  • Риск появления устаревших и неиспользуемых файлов, что усложняет управление сайтом.

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

Как WordPress работает с медиа файлами и связями

Медиа файлы в WordPress хранятся как отдельный тип записи attachment. Каждое вложение указывает на родительский пост через поле post_parent. Именно эта связь позволяет определить, какие медиа файлы относятся к конкретной записи.

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

Удаление связанных медиа файлов программно: пример функции для wpfind.ru

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

function wpfind_delete_post_attachments($post_id) {
    // Получаем все вложения с post_parent = $post_id
    $args = array(
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
        'post_parent'    => $post_id,
        'fields'         => 'ids',
        'post_status'    => 'any',
    );
    $attachments = get_posts($args);

    if (!empty($attachments)) {
        foreach ($attachments as $attachment_id) {
            // Удаляем медиа файл вместе с физическим файлом
            wp_delete_attachment($attachment_id, true);
        }
    }
}

// Добавляем хук на удаление поста
add_action('before_delete_post', 'wpfind_delete_post_attachments');

Эта функция получает все вложения с родителем, равным удаляемому посту, и удаляет их физически вместе с записью в базе. Хук before_delete_post срабатывает перед удалением записи, что позволяет успеть удалить вложения.

Пояснения к коду

Использование wp_delete_attachment с параметром true гарантирует, что будет удалён не только пост-вложение, но и все файлы с диска (различные размеры изображений и оригинал).

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

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

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

Плагин Media Cleaner (https://wpshop.ru/media-cleaner/?utm_source=wpfind.ru&utm_medium=article&utm_campaign=kak-udalit-svyazannye-media-fajly-v-wordpress-prakticheskoe-rukovodstvo) отлично справляется с задачей поиска и удаления неиспользуемых медиа. Он анализирует базу и файлы в папках, помогая безопасно очистить библиотеку.

Если хочется сделать это программно, то можно использовать следующий подход:

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

Это достаточно сложная задача, поскольку медиа может использоваться динамически, в пользовательских полях или плагинах.

Пример расширенного кода для поиска и удаления неиспользуемых медиа

Ниже пример функции, которая проверяет наличие вложения в содержимом всех постов и удаляет, если не найдено:

function wpfind_delete_unused_attachments() {
    $attachments = get_posts(array(
        'post_type'      => 'attachment',
        'posts_per_page' => -1,
        'post_status'    => 'inherit',
        'fields'         => 'ids',
    ));

    foreach ($attachments as $attachment_id) {
        $url = wp_get_attachment_url($attachment_id);
        $used = false;

        // Получаем все посты с контентом
        $posts = get_posts(array(
            'posts_per_page' => -1,
            'post_type'      => 'any',
            'post_status'    => 'publish',
            's'              => basename($url), // ищем по имени файла
            'fields'         => 'ids',
        ));

        if (!empty($posts)) {
            $used = true;
        }

        if (!$used) {
            wp_delete_attachment($attachment_id, true);
        }
    }
}

// Запускать вручную, например через wp-cli или отдельный обработчик
// wpfind_delete_unused_attachments();

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

Плагины для управления медиа файлами на wpfind.ru

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

  • Clearfy Pro – оптимизация и очистка сайта, в том числе управление медиа.
  • WPRemark – улучшение работы с комментариями и вложениями.
  • OmniVideo – для работы с медиа видео, если нужно удалять связанные видеофайлы.

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

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

Удаление связанных медиа файлов — важный аспект оптимизации сайта на WordPress. Автоматизация процесса помогает сэкономить место на сервере и избежать захламления базы данных.

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

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

Оптимизация базы данных WordPress: практические советы и примеры
14.11.2025
Как использовать WP REST API для создания пользовательских endpoint’ов в WordPress
02.04.2026
Как избежать конфликтов между плагинами в WordPress: практические решения
25.02.2026
WooCommerce: автоматическое удаление заказов по статусу и срокам
24.04.2026
Как использовать WPRemark для автоматического комментирования в WordPress
28.01.2026

Сайт в разработке, скоро здесь будет портал о WordPress.